Jump to content

Создаем дополнительную страницу с Формой


Recommended Posts

Друзья, нужна помощь!
Нужно было создать отдельную форму по мимо feedback, для поставщиков, чтобы заполнили отдельную форму и при нажатие отправлялось сразу админу, без каких-либо постов в админке. Назовем эту страницу Поставщикам. Необходимо довести до ума.

Как это сделал:
Для начало, как обычно создаем для раздела "Поставщикам" шаблон.
1.) В папке view сделал дубликат файла FeedbackView.php и переименовал его в SupplierView.php.

2.) В файле SupplierView.php, там где:

class FeedbackView extends View 


вместо него пишем:

class SupplierView extends View


3.) В этом же файле, почти в конце, там где:

$body = $this->design->fetch('feedback.tpl');


вместо него пишем:

$body = $this->design->fetch('supplier.tpl');



Далее создал таким образом шаблон: supplier.tpl

4.) Дублирую файл feedback.tpl в папке html и переименовываю его в supplier.tpl
На этой странице добавляю необходимые поля для Поставщиков.

5.) Далее, в файле .htaccess в корне сайта прописываем:
после строки

# feedback
RewriteRule ^contact/?$	index.php?module=FeedbackView  [L,QSA]


вставляем:

# supplierRewriteRule ^supplier/?$	index.php?module=SupplierView  [L,QSA]


6.) В Админки сайта создал страницу и указал в поле "Адрес" - ту страницу, что создал, т.е. supplier. На сайте переходим на нее. Отображается все идеально!!

НО.. после заполнения полей, данные, а точнее только сообщение с поле message, как и обычно, отправляется в админку.
Необходимо сделать, чтобы сообщение (заполненные все поля) отправлялись только на почту админа, а в админке не добавлялось.

Пожалуйста, помогите довести до ума. Что нужно править в созданном файле SupplierView.php ???
Link to post
Share on other sites
  • 5 months later...

Решили ли вы задачу? Сегодня озадачился абсолютно тем же вопросом. 

Думал сделать так: 

 

- Создал отдельную таблицу garantys по аналогии с feedbacks -  с нужными полями

 

 

CREATE TABLE


    `garanty` (


        `id`    bigint(20) NOT NULL AUTO_INCREMENT,


        `date`    datetime NOT NULL, 


        `ip`    varchar(20) NOT NULL,
        
        `name`    varchar(255) NOT NULL,
        
        `email`    varchar(255) NOT NULL,
        
        `message` text NOT NULL,
        
        `address`    varchar(255) NOT NULL,
        
        `phone`    varchar(255) NOT NULL,
        
        `model`    varchar(255) NOT NULL,
        
        `serial`    varchar(255) NOT NULL,
        
        `extended_number`    varchar(255) NOT NULL,
        
        `pages`    varchar(255) NOT NULL,
        
        `purchase_date`    varchar(255) NOT NULL,
            
        PRIMARY KEY(`id`)


    )
 

 

 - Далее в папке /api  дубль файла  feedbacks.php обозвав garanty.php внутри нее есть запросы к базе - добавил свои 

 

   {
        $query = $this->db->placehold("SELECT 
                                            g.id, 
                                            g.date,
                                            g.ip, 
                                            g.name, 
                                            g.email, 
                                            g.message, 
                                            g.address, 
                                            g.phone, 
                                            g.model, 
                                            g.serial, 
                                            g.extended_number,  
                                            g.pages,
                                            g.purchase_date,
                                            fROM __garantys g WHERE id=? LIMIT 1", intval($id));
 

 

Потом  в скопированном из view/feedbakView.php в view/GarantyView.php  добавил: 

 

 

$feedback->name         = $this->request->post('name');
            $feedback->address      = $this->request->post('address');
            $feedback->phone        = $this->request->post('phone');
            $feedback->email        = $this->request->post('email');
            $feedback->model        = $this->request->post('model');
            $feedback->serial        = $this->request->post('serial');
            $feedback->extended_number        = $this->request->post('extended_number');
            $feedback->pages        = $this->request->post('pages');
            $feedback->purchase_date        = $this->request->post('purchase_date');
            $feedback->message      = $this->request->post('message');
            $captcha_code           = $this->request->post('captcha_code');
            
            $this->design->assign('name',  $feedback->name);
            $this->design->assign('address',  $feedback->address);
            $this->design->assign('phone',  $feedback->phone);
            $this->design->assign('email', $feedback->email);
            $this->design->assign('model', $feedback->model);
            $this->design->assign('serial', $feedback->serial);
            $this->design->assign('extended_number', $feedback->extended_number);
            $this->design->assign('pages', $feedback->pages);
            $this->design->assign('purchase_date', $feedback->purchase_date);
            $this->design->assign('message', $feedback->message);


//а еще внизу 
// Отправляем email
                $this->notify->email_garanty_admin($feedback_id);            
 

 

В самой форме добавил все поля. 

В файле Notify.php скопировал и изменил код 

 

public function email_feedback_admin($feedback_id)
    { 
            if(!($feedback = $this->feedbacks->get_feedback(intval($feedback_id))))
                return false;


            $this->design->assign('feedback', $feedback);


            // Отправляем письмо
            $email_template = $this->design->fetch($this->config->root_dir.'simpla/design/html/email_feedback_admin.tpl');
            $subject = $this->design->get_var('subject');
            $this->email($this->settings->comment_email, $subject, $email_template, "$feedback->name <$feedback->email>", "$feedback->name <$feedback->email>");
    }

//изменил название функции отправки
    public function email_garanty_admin($feedback_id)
    { 
            if(!($feedback = $this->feedbacks->get_feedback(intval($feedback_id))))
                return false;


            $this->design->assign('feedback', $feedback);


            // Отправляем письмо гарантия
            $email_template = $this->design->fetch($this->config->root_dir.'simpla/design/html/email_garanty_admin.tpl');
            $subject = $this->design->get_var('subject');
            $this->email($this->settings->comment_email, $subject, $email_template, "$feedback->name <$feedback->email>", "$feedback->name <$feedback->email>");
    }
 

 

Так же сделал форму email_garanty_admin.tpl

 

 

 

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

Добавив вручную записи в таблицу не смог вывести в админку.

 

Отправка не заработала. Ошибка 500.

 

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

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

 

Может кто подскажет что еще нужно сделать, чтоб заработало. Или может кому приходилось делать что-то подобное?

Link to post
Share on other sites

 

Может кто подскажет что еще нужно сделать, чтоб заработало. Или может кому приходилось делать что-то подобное?
Link to post
Share on other sites

Я делал по логике: где нашел - там изменил. Может я просто не знаю о существовании каких-то файлов?

И как вообще считаете, может так заработать, если делать таким образом?

Link to post
Share on other sites

if(!($feedback = $this->feedbacks->get_feedback(intval($feedback_id)))) - это не обращение к таблице. Это обращение к Feedbacks.php из папки api.  функция get_feedback вызывается оттуда. 

Хотя ошибка была как раз в этом. у меня то этот файл уже назван garantys.php

Link to post
Share on other sites

Форма работает. Сообщения отправляются в базу и на почту. Осталось добавить отображение в админке. 

А какие трудности? Все делается по образу и подобию.

Link to post
Share on other sites
  • 2 years later...

здравствуйте, а можно сделать все проще без записей в базу и прочих приблуд? хочу повесить форму на готовый обработчик phpmailer, прописал к нему путь через action (form action="/form/contact-form.php" ) но форма не срабатывает шлет  в корзину, что можно сделать чтобы работала? я так понимаю править htaccess ?

Link to post
Share on other sites

сам обработчик работает нормально при прямом к нему обращении, но при нажатии на submit происходит перенос в корзину, куда шлются все данные  post  - cart?sender_name=test&sender_tel=test&sender_email=678768 

 

нужен совет от знатоков simpla в какую сторону копать, это какие то запрещающие настройки на уровне движка, либо надо прописать какой то редирект для формы action , в интернете  не нахожу ответа на данный вопрос

Link to post
Share on other sites

сам обработчик работает нормально при прямом к нему обращении, но при нажатии на submit происходит перенос в корзину, куда шлются все данные  post  - cart?sender_name=test&sender_tel=test&sender_email=678768 

 

нужен совет от знатоков simpla в какую сторону копать, это какие то запрещающие настройки на уровне движка, либо надо прописать какой то редирект для формы action , в интернете  не нахожу ответа на данный вопрос

данные у вас шлются в этом случае не post а get. смотрите, может вы форму в форме сделали?

Link to post
Share on other sites

данные у вас шлются в этом случае не post а get. смотрите, может вы форму в форме сделали?

да нашел, предыдущие разработчики закомментировали /form  . 

 

а но от этого проблемы не ушли, форма заработала, но есть еще форма "Заказать звонок" через стандартный обработчик simpla она вообще без action 

 

и она не шлет теперь данные, а перекидывает /?name=etrr&phone=rtet&email=ertert%40rttret&message=retret

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...