IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Создание копии формы сообщения, Реализация с помощью PHPShop IDE
Dennion
сообщение 21.1.2011, 12:12
Сообщение #1


Администратор
***

Группа: Главные администраторы
Сообщений: 5914
Регистрация: 20.8.2009
Из: Москва
Пользователь №: 1
Версия CMS Free: 3.3



Требуется создать копию формы сообщения с сайта под свои нужды.

Для реализации воспользуемся PHPShop IDE (входит в пакет EasyControl)

1. Выбираем "Файл" - "Новый" - "Новый раздел"
указываем в качестве имя раздела свое имя, например myforma (будет доcтупна далее по ссылке http://cms.phpshopcms.ru/myforma/)
жмем "Ок"
Прикрепленное изображение



2. будет создан файл "myforma.core.php" в папке phpshop/core/
содержание файла откроется в редакторе

Прикрепленное изображение


Код
<?php
          
/**
* Форма сообщения с сайта
* @author Студия А
*/


      
class PHPShopMyforma extends PHPShopCore {

    function PHPShopMyforma() {
        parent::PHPShopCore();
    }
    
    function index(){
        // Мета
        $this->title='Моя новая страница';
        $this->description='Моя новая страница';
        $this->keywords='Моя новая страница';

        // Определяем переменые
        $this->set('pageContent','Моя новая страница, содержание');
        $this->set('pageTitle','Моя новая страница');


        // Подключаем шаблон
        $this->parseTemplate($this->getValue('templates.page_page_list'));
    }
}
?>


3. открываем в IDE файл phpshop/core/forma.core.php (файл заводской формы с сайта) и копируем из нее функции (методы) в файл myforma.core.php

Код
/**
     * Экшен отправка формы при получении $_POST[message]
     */
    function message() {
        if(!empty($_SESSION['text']) and $_POST['key']==$_SESSION['text']) {
            $this->send();
        }else $this->set('Error',"Ошибка ключа, повторите попытку ввода ключа");
    }


    /**
     * Генерация сообщения
     */
    function send() {

        // Подключаем библиотеку отправки почты
        PHPShopObj::loadClass("mail");

        // Проверяем заполненность полей
        if(PHPShopSecurity::true_param($_POST['nameP'],$_POST['subject'],$_POST['message'],$_POST['mail'])){

            $zag=$this->$_POST['subject']." - ".$this->PHPShopSystem->getValue('name');
            $message="Вам пришло сообщение с сайта ".$this->PHPShopSystem->getValue('name')."

Данные о пользователе:
----------------------
";

            // Информация по сообщению
            foreach($_POST as $key=>$val)
$message.=$val."
";

            $message.="
Дата:               ".date("d-m-y H:s a")."
IP:
".$_SERVER['REMOTE_ADDR']."
---------------

С уважением,
http://".$_SERVER['SERVER_NAME'];

            $PHPShopMail = new PHPShopMail($this->PHPShopSystem->getValue('admin_mail'),$_POST['mail'],$zag,$message);
            $this->set('Error',"Сообщение успешно отправлено");
        }
        else $this->set('Error',"Ошибка заполнения обязательных полей");
    }


Немного теории:
Когда запускается файл myforma.core.php то отрабатывается первым делом функция PHPShopMyforma, из которой читается карта выполнений функций на какое-либо действие.
действия (экшены) записываются в строке
Код
$this->action=array("post"=>"message","nav"=>"index");


Это строка нам говорит, что если есть POST переменная с именем "message" (результат отправки формы - нажатие на кнопку отправить), то будет выполнена функция message(), у нас это "post"=>"message"

Код
    /**
     * Экшен отправка формы при получении $_POST[message]
     */
    function message() {
        if(!empty($_SESSION['text']) and $_POST['key']==$_SESSION['text']) {
            $this->send();
        }else $this->set('Error',"Ошибка ключа, повторите попытку ввода ключа");
    }


а если нет передачи никаких переменных "nav"=>"index", то выполняется функция index()
Код
    function index() {

        // Мета
        $this->title="Форма связи - ".$this->PHPShopSystem->getValue("name");

        // Определяем переменные
        $this->set('pageTitle','Форма связи');

        // Подключаем шаблон
        $this->addToTemplate("page/page_forma_list.tpl");
        $this->parseTemplate($this->getValue('templates.page_page_list'));

    }


3. Вернемся к нашему файлу myforma.core.php, для своей новой формы поправим его
3.1 добавим список экшенов
Код
    function PHPShopMyforma() {
        // список экшенов
        $this->action=array("post"=>"message","nav"=>"index");
        parent::PHPShopCore();
    }

3.2 Нарисуем свою html форму сообщения, для этого изменим функцию index
Код
    function index(){
        // Мета
        $this->title='Моя новая страница';
        $this->description='Моя новая страница';
        $this->keywords='Моя новая страница';

        // Определяем переменые
        $this->set('pageContent','Моя новая страница, содержание');
        $this->set('pageTitle','Моя новая страница');


        // Подключаем шаблон
        $this->parseTemplate($this->getValue('templates.page_page_list'));
    }


изменим строку $this->set('pageContent','Моя новая страница, содержание'); на
Код
$this->set('pageContent','
        <forma action="post">
        Сколько Вам лет: <INPUT size=10 name=old><br>
        Ваша почта: <INPUT size=10 name=mail><br>
        <INPUT type=submit value="Отправить сообщение" name="message">
        </forma>');

3.3 Жмем оконку "Сохраннить файл" и иконку "Запустить проект". В результате получаем примитивную форму
Прикрепленное изображение


4. Результат отправки будет отрабатываться функцией message по условию $this->action=array("post"=>"message"
Мы взяли для примера код из файла forma.core.php где идет проверки на бота через защитную кратинку, нам в примере такая проверка не нужна и мы модернизируем функцию message
Код
     * Экшен отправка формы при получении $_POST[message]
     */
    function message() {

            $this->send();

    }

т.е. сразу отправляем почтовое сообщение, другим вариантов мог быть путь простой замены в экшене "post"=>"message" на "post"=>"send"

5. Правим функцию send(), в ней нам нужно поменять проверку заполненности полей, за это отвечает строка
Код
        // Проверяем заполненность полей
        if(PHPShopSecurity::true_param($_POST['nameP'],$_POST['subject'],$_POST['message'],$_POST['mail'])) {

т.к у нас пока только одно поле, то проверим лишь его, упростив код до
Код
  
if(!empty($_POST['old'])){


6. Итого получаем код файла myforma.core.php
Код

<?php
          
/**
* Форма сообщения с сайта
* @author Студия А
*/

class PHPShopMyforma extends PHPShopCore {
    
    function PHPShopMyforma() {
        // список экшенов
        $this->action=array("post"=>"message","nav"=>"index");
        parent::PHPShopCore();
    }
    
    function index() {
        // Мета
        $this->title='Моя новая страница';
        $this->description='Моя новая страница';
        $this->keywords='Моя новая страница';
        
        // Определяем переменые
        $this->set('pageContent','
        <forma action="post">
        Сколько Вам лет: <INPUT size=10 name=old><br>
        Ваша почта: <INPUT size=10 name=mail><br>
        <INPUT type=submit value="Отправить сообщение" name="message">
        </forma>');
        $this->set('pageTitle','Моя новая страница');
        
        // Подключаем шаблон
        $this->parseTemplate($this->getValue('templates.page_page_list'));
    }
    
    /**
     * Экшен отправка формы при получении $_POST[message]
     */
    function message() {

            $this->send();

    }


    /**
     * Генерация сообщения
     */
    function send() {
        
        // Подключаем библиотеку отправки почты
        PHPShopObj::loadClass("mail");
        
        // Проверяем заполненность полей
        if(!empty($_POST['old'])) {
            
            $zag=$this->$_POST['subject']." - ".$this->PHPShopSystem->getValue('name');
            $message="Вам пришло сообщение с сайта ".$this->PHPShopSystem->getValue('name')."

Данные о пользователе:
----------------------
";
            
            // Информация по сообщению
            foreach($_POST as $key=>$val)
                $message.=$val."
";
            
            $message.="
Дата:               ".date("d-m-y H:s a")."
IP:
".$_SERVER['REMOTE_ADDR']."
---------------

С уважением,
http://".$_SERVER['SERVER_NAME'];
            
            $PHPShopMail = new PHPShopMail($this->PHPShopSystem->getValue('admin_mail'),$_POST['mail'],$zag,$message);
            $this->set('Error',"Сообщение успешно отправлено");
        }
        else
            $this->set('Error',"Ошибка заполнения обязательных полей");
    }
}
?>


Советы по редактору PHPShop IDE:
1. Используйте мастер создания новых файлов и помощника
2. Если строка подсвечена зеленым светом - то это активная строка и по ней можно щелкнуть для настройки параметров и вызова справки
Прикрепленное изображение

4. В правом верхнем углу редактора показываются переменные, которые вы можете вставить в код в данном месте, если кликнуть в другое место или функцию, то список измениться. Для включения переменной просто кликните по нужному заголовку в списке.

Прикрепленное изображение

5. Если нажать в коде на правую кнопку мышки, то всплывет список подсказок для вставки кода для
- HTML основные теги
- PHP популярные функции
- PHPShop IDE основные функции API

6. Для удобной верстки основные HTML теги вынесены в горизонтальное меню и снабжены справкой и помощником по заполнению.
Прикрепленное изображение
Прикрепленное изображение

7. Описание логики, используемой в уроке, есть в справочнике http://wiki.phpshopcms.ru/index.php/PHPShopCore
Перейти в начало страницы
 
+Цитировать сообщение
Worm
сообщение 21.1.2011, 12:40
Сообщение #2


Активный участник
***

Группа: Модератор
Сообщений: 2675
Регистрация: 30.12.2009
Из: Самара
Пользователь №: 213
Версия CMS Free: 34
Создано сайтов: Достаточно много



Супер! Спасибо!
Перейти в начало страницы
 
+Цитировать сообщение
ElGato
сообщение 21.1.2011, 15:14
Сообщение #3


Я - не волшебник, я только лечусь
***

Группа: Модератор
Сообщений: 1009
Регистрация: 19.8.2010
Из: Екб. Подгорье
Пользователь №: 549
Версия CMS Free: 342-344



Действительно, спасибо за разъяснения.

PS: Не сразу заметил, что появилась отдельная рубрика "Уроки".
Молодцы! Новичкам будет куда идти, когда их пошлют... wink.gif
Перейти в начало страницы
 
+Цитировать сообщение
Caracal
сообщение 21.1.2011, 15:51
Сообщение #4


Активный участник
***

Группа: Пользователи
Сообщений: 74
Регистрация: 18.10.2010
Из: Москва
Пользователь №: 615
Версия CMS Free: 3.3.2.2
Создано сайтов: 1



Dennion, огромный респект и благодарность!
Перейти в начало страницы
 
+Цитировать сообщение
Caracal
сообщение 23.1.2011, 18:56
Сообщение #5


Активный участник
***

Группа: Пользователи
Сообщений: 74
Регистрация: 18.10.2010
Из: Москва
Пользователь №: 615
Версия CMS Free: 3.3.2.2
Создано сайтов: 1



Эммм, попробовал я тут через изи контрол, в соответствии с данным мануалом создать новую форму, но что-то как-то не пошло =) не разобрлся с софтом =(

с софтом разбираться нужно... нельзя ли более просто решение, без софта, ручками - привычнее знаете ли =)

буду благодарен..

Перейти в начало страницы
 
+Цитировать сообщение
Caracal
сообщение 23.1.2011, 19:30
Сообщение #6


Активный участник
***

Группа: Пользователи
Сообщений: 74
Регистрация: 18.10.2010
Из: Москва
Пользователь №: 615
Версия CMS Free: 3.3.2.2
Создано сайтов: 1



Хотя...

вроде начал понимать откуда ноги растут... но все таки, хотелось бы как-то попроще...

типа: копируем этот файл, тут меняем это на это, сюда вставляем новые поля...

Потому что нужна полная функциональность формы обратной связи (в том числе и капча), только с другими полями.
Перейти в начало страницы
 
+Цитировать сообщение
Dennion
сообщение 24.1.2011, 11:33
Сообщение #7


Администратор
***

Группа: Главные администраторы
Сообщений: 5914
Регистрация: 20.8.2009
Из: Москва
Пользователь №: 1
Версия CMS Free: 3.3



Проще некуда, читай между строк копируем и меняем.
В данном примере IDE используется только для создания файла с 10 строками, создай его сам ручками.
Я расписал принцип работы, если в это въехать то можно далеко уйти и софт тут не причем как таковой smile.gif
Для работы с php нужно желания в нем работать, оно придет со временем.
Режем клеем тут работает, но если быть далеким от темы, то любой шаг в сторону приведет к ошибке.

В кратце
1. создаем файл myforma.core.php (п.6)
2. сравниваем с оригиналом forma.core.php
3. читаем мои комменты и ищем различии в файлах этих.
Перейти в начало страницы
 
+Цитировать сообщение
Caracal
сообщение 25.1.2011, 15:22
Сообщение #8


Активный участник
***

Группа: Пользователи
Сообщений: 74
Регистрация: 18.10.2010
Из: Москва
Пользователь №: 615
Версия CMS Free: 3.3.2.2
Создано сайтов: 1



Цитата(Dennion @ 24.1.2011, 11:33) *
Проще некуда, читай между строк копируем и меняем.
В данном примере IDE используется только для создания файла с 10 строками, создай его сам ручками.
Я расписал принцип работы, если в это въехать то можно далеко уйти и софт тут не причем как таковой smile.gif
Для работы с php нужно желания в нем работать, оно придет со временем.
Режем клеем тут работает, но если быть далеким от темы, то любой шаг в сторону приведет к ошибке.

В кратце
1. создаем файл myforma.core.php (п.6)
2. сравниваем с оригиналом forma.core.php
3. читаем мои комменты и ищем различии в файлах этих.

Dennion, вы правы. Действительно чутка посидел, поковырял и вроде пошло. Просто смутило в самом начале, что нужно юзать EasyControl.

Итак что получилось по факту:

1) был создан файл /core/anketa.core.php
2) в данном файле были исправлены 2 записи:
- class PHPShopAnketa extends PHPShopCore {
- function PHPShopAnketa()
3) был создан и подключен файл /page/page_anketa_list.tpl вместо /page/page_forma_list.tpl - создан - это громко сказано, он был тупо скопирован =)

собственно вопрос по функции отправки почты.

В файле /core/anketa.core.php мы имеем:

function send() {

Код
        // Подключаем библиотеку отправки почты
        PHPShopObj::loadClass("mail");

        if( !empty($_POST['nameP']) and !empty($_POST['subject']) and !empty($_POST['message']) and !empty($_POST['mail'])) {

            $zag=$this->$_POST['subject']." - ".$this->PHPShopSystem->getValue('name');



где:
Код
if( !empty($_POST['nameP']) and !empty($_POST['subject']) and !empty($_POST['message']) and !empty($_POST['mail']))

я так понимаю проверка на заполнение, а:
Код
$zag=$this->$_POST['subject']." - ".$this->PHPShopSystem->getValue('name');

- сама функция. Или я ошибаюсь.

И еще смущает вот какой факт: в файле /page/page_anketa_list.tpl форма имеет имя "forma_gbook", но в обработчике формы я не нашел обращения к этой переменной =( нужно ли, при создании новой формы называть ее как-то по другому?

Надеюсь, внятно объяснил... хотя, смотрю, понаписал ппц.
Перейти в начало страницы
 
+Цитировать сообщение
Dennion
сообщение 25.1.2011, 15:25
Сообщение #9


Администратор
***

Группа: Главные администраторы
Сообщений: 5914
Регистрация: 20.8.2009
Из: Москва
Пользователь №: 1
Версия CMS Free: 3.3



если не используешь JavaScript для проверки заполненности формы, то не влияет.
Функция отправки почты $PHPShopMail = new PHPShopMail($this->PHPShopSystem->getValue('admin_mail'),$_POST['mail'],$zag,$message);

Описание библиотеки PHPShopMail http://doc.phpshopcms.ru/PHPShopClass/PHPShopMail.html
Перейти в начало страницы
 
+Цитировать сообщение
Caracal
сообщение 25.1.2011, 15:55
Сообщение #10


Активный участник
***

Группа: Пользователи
Сообщений: 74
Регистрация: 18.10.2010
Из: Москва
Пользователь №: 615
Версия CMS Free: 3.3.2.2
Создано сайтов: 1



Пасиб! буду ковырять дальше.
Перейти в начало страницы
 
+Цитировать сообщение
eirechint
сообщение 20.2.2011, 21:58
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 1
Регистрация: 20.2.2011
Пользователь №: 1864
Версия CMS Free: eirechint



Веб-фо?рум — класс веб-приложений для организации общения посетителей веб-сайта. Термин соответствует смыслу исходного понятия «форум». Для работы форума часто требуется база данных, как правило, SQL
Форум предлагает набор разделов для обсуждения. Работа форума заключается в создании пользователями тем в разделах и последующим обсуждением внутри этих тем. Отдельно взятая тема, по сути, представляет собой тематическую гостевую книгу.

Распространённая иерархия веб-форума: Разделы > темы > сообщения.

Обычно сообщения несут информацию «автор — тема — содержание — дата/время». Сообщение и все ответы на него образует «ветку» или «тему» (также употребляются кальки «топик», «топ» от англ. topic; «тред», «трэд» от англ. thread).

Отклонение от начальной темы обсуждения (т. н. оффтоп, как и флуд) (англ. Off-topic) часто запрещено правилами форума. За соблюдением правил следят модераторы и администраторы — участники, наделённые возможностью редактировать, перемещать и удалять чужие сообщения в определённом разделе или теме, а также контролировать к ним доступ отдельных зарегистрированных участников, иногда и незарегистрированных,- гостей.

На форумах может применяться чрезвычайно гибкое разграничение доступа к сообщениям. Так, на одних форумах чтение и создание новых сообщений доступны любым случайным посетителям (гостям), на других необходима предварительная регистрация (наиболее распространённый вариант) — те и другие форумы называют открытыми. Применяется и смешанный вариант — когда отдельные темы могут быть доступны на запись всем посетителям, а другие — только зарегистрированным участникам. Кроме открытых, существуют закрытые форумы, доступ к которым определяется персонально для каждого участника администраторами форума. На практике также нередко встречается вариант, когда некоторые разделы форума общедоступны, а остальная часть доступна только узкому кругу участников.

При регистрации участники форума могут создавать профили — страницы со сведениями о данном участнике. В своём профиле участник форума может сообщить информацию о себе, настроить свой аватар или автоматически добавляемую к его сообщениям подпись — в зависимости от предпочтений. Подпись может быть статичным текстом либо содержать графические картинки, в том числе т. н. юзербары.

Большинство форумов имеет систему личных сообщений, позволяющую зарегистрированным пользователям общаться индивидуально, аналогично электронной почте.

Перейти в начало страницы
 
+Цитировать сообщение
ElGato
сообщение 20.2.2011, 22:06
Сообщение #12


Я - не волшебник, я только лечусь
***

Группа: Модератор
Сообщений: 1009
Регистрация: 19.8.2010
Из: Екб. Подгорье
Пользователь №: 549
Версия CMS Free: 342-344



Цитата(eirechint @ 20.2.2011, 23:58) *

Молодец, можно использовать в качестве ЧАВО. Вот еще бы ты не был ботом... А так, в бан.
Перейти в начало страницы
 
+Цитировать сообщение

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 24.1.2020, 15:35