IPB

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

 
Ответить в данную темуНачать новую тему
> Как создать свою форму?
voden
сообщение 21.9.2012, 10:39
Сообщение #1


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

Группа: Пользователи
Сообщений: 61
Регистрация: 28.3.2011
Пользователь №: 2513
Версия CMS Free: 3.4.3.0.1
Создано сайтов: 1



Есть форма "для связи" в сайт/forma/

Хочется создать другую форму, например, сайт/zakaz/

какие файлы для этого надо править, какие под какими именами скопировать и какие процедуры проходит отправляемая форма в процессе обработки?

(для SEO.microEdition)
P.S. Пишу здесь, т.к. в форум http://forum.phpshopcms.ru/index.php?showforum=26 у меня прав писать нет
Перейти в начало страницы
 
+Цитировать сообщение
Dennion
сообщение 21.9.2012, 10:52
Сообщение #2


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

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



Права раздал, теперь можно писать.
создать phpshop/core/zakaz.core.php

Код
<?php

/**
* Обработчик формы сообщения с сайта
* @author PHPShop Software
* @version 1.2
* @package PHPShopCore
*/
class PHPShopZakaz extends PHPShopCore {

    /**
     * Конструктор
     */
    function PHPShopZakaz() {
        $this->debug=false;
        
        // список экшенов
        $this->action=array("post"=>"message","nav"=>"index");
        parent::PHPShopCore();
    }


    /**
     * Экшен по умолчанию, вывод формы связи
     */
    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'));

    }

    /**
     * Экшен отправка формы при получении $_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',"Ошибка заполнения обязательных полей");
    }

}
?>


изменилось только это
Код
class PHPShopZakaz extends PHPShopCore {

    /**
     * Конструктор
     */
    function PHPShopZakaz() {
        $this->debug=false;
        
        // список экшенов
        $this->action=array("post"=>"message","nav"=>"index");
        parent::PHPShopCore();
    }

имя класса и конструктор.
Перейти в начало страницы
 
+Цитировать сообщение
voden
сообщение 21.9.2012, 12:07
Сообщение #3


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

Группа: Пользователи
Сообщений: 61
Регистрация: 28.3.2011
Пользователь №: 2513
Версия CMS Free: 3.4.3.0.1
Создано сайтов: 1



А как отрабатывается обработка формы?
Точнее - как узнать, доходит ли отправка хотя бы до экшена message?
Попытки вставить в message
$this->set('Error',"отправлена форма");
видимого эффекта не дают.
сама форма обнуляется.

Имеет ли значение, что поля message в новой форме уже нет?
Перейти в начало страницы
 
+Цитировать сообщение
Dennion
сообщение 21.9.2012, 12:12
Сообщение #4


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

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



Код
        // список экшенов
        $this->action=array("post"=>"message","nav"=>"index");


тут "post"=>"message" значbт что при наличии $_POST['message'] будет выполнено $this->message();
Перейти в начало страницы
 
+Цитировать сообщение
voden
сообщение 21.9.2012, 12:40
Сообщение #5


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

Группа: Пользователи
Сообщений: 61
Регистрация: 28.3.2011
Пользователь №: 2513
Версия CMS Free: 3.4.3.0.1
Создано сайтов: 1



Ах вот оно как всё хитрО!
Осталось домыслить, как бы еще при неверной капче не сбрасывать форму... в котрой с десяток полей.
Перейти в начало страницы
 
+Цитировать сообщение
Dennion
сообщение 21.9.2012, 12:59
Сообщение #6


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

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



В шаблон формы выводи сразу посты, например

Код
<textarea name="message">@php echo $_POST['message']; php@</textarea>
Перейти в начало страницы
 
+Цитировать сообщение
voden
сообщение 23.9.2012, 21:10
Сообщение #7


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

Группа: Пользователи
Сообщений: 61
Регистрация: 28.3.2011
Пользователь №: 2513
Версия CMS Free: 3.4.3.0.1
Создано сайтов: 1



Что-то я сделал не так.

Код
Fatal error: Class 'PHPShopMail' not found in /home/site/public_html/phpshop/class/U.mail.class.php on line 4


/home/site/public_html/phpshop/class/U.mail.class.php
Код
<?php
class PHPShopUMail extends PHPShopMail{

    function sendMail($content,$header) {
        global $SysValue;
        if($SysValue['my']['debug'] == 'true'){
            $text = "To: " . $this->to . "\n\nZag: " . $this->zag . "\n\nHeader:\n" .$header . "\n\nContent:\n" .$content . "\n" . str_repeat("-=", 40) . "/n";
            PHPShopObj::loadClass('file');
            PHPShopFile::write('./mail.txt',$text);
        } else {
            mail($this->to,$this->zag,$content,$header);
        }
    }
}
?>
Перейти в начало страницы
 
+Цитировать сообщение
Dennion
сообщение 24.9.2012, 10:00
Сообщение #8


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

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



надо предварительно подгрузить исходный класс mail.class.php
Перейти в начало страницы
 
+Цитировать сообщение
voden
сообщение 24.9.2012, 15:00
Сообщение #9


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

Группа: Пользователи
Сообщений: 61
Регистрация: 28.3.2011
Пользователь №: 2513
Версия CMS Free: 3.4.3.0.1
Создано сайтов: 1



Подгрузил, толку немного.
Белый экран, в логах ошибка 500, неинформативно.
Очевидно, что-то недонастроено в апаче или пхп. Но что?

И еще вопрос: в ини-файле есть строка
Код
error="./phpshop/inc/error.inc.php";             # Файл с функциями ошибок

хотя такого файла в дистрибутиве нет.
Это ошибка или так должно быть?
Перейти в начало страницы
 
+Цитировать сообщение
Dennion
сообщение 24.9.2012, 15:06
Сообщение #10


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

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



error="./phpshop/inc/error.inc.php"; такого нет файла
Перейти в начало страницы
 
+Цитировать сообщение
voden
сообщение 24.9.2012, 15:32
Сообщение #11


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

Группа: Пользователи
Сообщений: 61
Регистрация: 28.3.2011
Пользователь №: 2513
Версия CMS Free: 3.4.3.0.1
Создано сайтов: 1



С малоинформативностью вопрос снялся. Донастроил PHP.

Вопрос: как правильно предварительно подгрузить исходный класс mail.class.php?

попытки пропписать в функции send
Код
       PHPShopObj::loadClass("mail");
        PHPShopObj::loadClass("U.mail");

действия не возымели.

А, сам разобрался: надо было PHPShopObj::loadClass("mail"); писать в начале файла U.mail.class.php smile.gif
Перейти в начало страницы
 
+Цитировать сообщение
voden
сообщение 25.9.2012, 15:34
Сообщение #12


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

Группа: Пользователи
Сообщений: 61
Регистрация: 28.3.2011
Пользователь №: 2513
Версия CMS Free: 3.4.3.0.1
Создано сайтов: 1



Теперь чешется это всё автоматизировать: прикрутить какой-никакой формогенератор, ибо вручную писать форму и последующий обработчик при количестве полей >> 3 занятие утомляющее.

Есть ли какие-то наработки в этом плане? Нашел на просторах форума formgenerator для PhpShopCmsFree, но заработает ли он под Micro?
Перейти в начало страницы
 
+Цитировать сообщение
Dennion
сообщение 25.9.2012, 15:51
Сообщение #13


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

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



formgenerator использует БД для хранения своих форм, на микре пахать не будет. Если только переделать хранения описаний форм из базы в файлы.
Перейти в начало страницы
 
+Цитировать сообщение
voden
сообщение 26.9.2012, 10:58
Сообщение #14


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

Группа: Пользователи
Сообщений: 61
Регистрация: 28.3.2011
Пользователь №: 2513
Версия CMS Free: 3.4.3.0.1
Создано сайтов: 1



Как я понял, formgenerator сохраняет кусок html с кодом формы, т.е. смешивает оформление с содержанием.
А мне мечтается про отделение одного от другого: т.е. есть шаблон или группа вкладываемых шаблонов для каждого из типов элементов формы и есть массив, хранящий перечень элементов, значений, атрибутов, etc.
Ну и, конечно, некий JS для проверки правильности заполнения.

Поэтому вопрос такой: как правильно собирать страницу из множества шаблонов?
Перейти в начало страницы
 
+Цитировать сообщение
Dennion
сообщение 26.9.2012, 14:28
Сообщение #15


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

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



т.е. смешивает оформление с содержанием - если пойти от противного, то тогда форму нужно писать хелперами, а не шаблонами. А в основной шаблон только вставлять скомпилированный результат. В аттаче библиотечка хелпера, рисует формы и html. В CMS Free она так же есть.
Прикрепленный файл  text.class.php.zip ( 2,53 килобайт ) Кол-во скачиваний: 262
Перейти в начало страницы
 
+Цитировать сообщение
voden
сообщение 27.9.2012, 14:20
Сообщение #16


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

Группа: Пользователи
Сообщений: 61
Регистрация: 28.3.2011
Пользователь №: 2513
Версия CMS Free: 3.4.3.0.1
Создано сайтов: 1



А что такое хелперы и как ими пользуются? Где почитать?
Перейти в начало страницы
 
+Цитировать сообщение
Dennion
сообщение 27.9.2012, 14:53
Сообщение #17


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

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



Это библиотека помогающая писать html код через php, не писав сами теги html, те заготовка. Ну например тебе нужно вывести картинку

Код
echo PHPShopText::img('my.gif')


или форму

Код
$content="Имя:";
$content.=PHPShopText::setInput('text','myname','123');
$content.=PHPShopText::setInput('submit','send','Отправить');
$d=PHPShopText::form($content,'form');
Перейти в начало страницы
 
+Цитировать сообщение

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

 



RSS Текстовая версия Сейчас: 18.9.2019, 21:00