Русскоязычный форум, посвященный фреймворку Kohana
http://forum.kohanaframework.su/

Модуль "Онлайн консультация".
http://forum.kohanaframework.su/viewtopic.php?f=31&t=302
Страница 1 из 2

Автор:  rain2 [ 09 авг 2012, 22:17 ]
Заголовок сообщения:  Модуль "Онлайн консультация".

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

Таблица в базе данных будет содержать поля
pat_name, pat_email, doc_name, question, response,date


Создаю модуль consultation c папками classes, config, views
дальше класс consultation/classes/consultation.hph
Код:
<?php defined('SYSPATH') OR die('No direct access allowed.');

class Consultation {


   //protected static $mail;


   public static function addquestion($config = NULL)
   {
     
   }
       
        public static function addresponse($config = NULL)
   {
     
   }
       
        public static function showquestion($config = NULL)
   {
     
   }
       
        public static function showresponse($config = NULL)
   {
     
   }
       
         public static function showform($config = NULL)
   {

   }


} // End

Автор:  rain2 [ 10 авг 2012, 00:20 ]
Заголовок сообщения:  Re: Модуль "Онлайн консультация".

Создаем модель consultation/classes/model/consultation.php
Код:
<?php

class Model_Consultation extends Model {

    public function get_question($id, $method) {
        return DB::select()
                        ->from('consultation')
                        ->where($method, "=", $id)
                        ->as_object()
                        ->execute()
                        ->current();
    }

    public function get_questions() {
        return DB::select()
                        ->from('consultation')
                        ->as_object()
                        ->execute();
    }

    public function add_question($args) {
        unset($args['submit']);
        $args = array_merge(
                array(
                    'pat_name' => '',
                    'pat_email' => '',
                    'question' => '',
                ), $args
        );
        return DB::insert('consultation', array_keys($args))
                        ->values(array_values($args))
                        ->execute();
    }

    public function update_consultation($args) {
        unset($args['submit']);
        $args = array_merge(
                array(
                    'pat_name' => '',
                    'pat_email' => '',
                    'question' => '',
                ), $args
        );
        return DB::update('consultation')
                        ->set($args)
                        ->where('consultation_id', '=', $args['consultation_id'])
                        ->execute();
    }

    public function remove_consultation($id) {
        return DB::delete('consultation')
                        ->where('consultation_id', '=', $id)
                        ->execute();
    }

}



Автор:  Sergey [ 10 авг 2012, 00:50 ]
Заголовок сообщения:  Re: Модуль "Онлайн консультация".

rain2 писал(а):
Создаю модуль consultation c папками classes, config, views

+ model
+init.php

rain2 писал(а):
дальше класс consultation/classes/consultation.hph

consultation.php

Где будет хранится статические файлы (img/js/css) для модуля?
Как подгружать собираетесь?
И почему не ORM?

Автор:  rain2 [ 10 авг 2012, 01:34 ]
Заголовок сообщения:  Re: Модуль "Онлайн консультация".

Sergey писал(а):

Где будет хранится статические файлы (img/js/css) для модуля?
Как подгружать собираетесь?
И почему не ORM?


Статических файлов не будет, возможно будет ORM, я же написал что я не программист, у меня что бы разобраться больше времени уходит.
Я не понял вопрос про подгружать, что подгружать??

Автор:  Sergey [ 10 авг 2012, 06:37 ]
Заголовок сообщения:  Re: Модуль "Онлайн консультация".

rain2 писал(а):
я же написал что я не программист


Зачем тогда вам CMF? :shock: Возьмите CMS

Автор:  rain2 [ 11 авг 2012, 21:22 ]
Заголовок сообщения:  Re: Модуль "Онлайн консультация".

consultation->classes->model->consultation.php

Код:
<?php

class Model_Consultation extends Model {

    public function get_question($id, $method) {
        return DB::select()
                        ->from('consultation')
                        ->where($method, "=", $id)
                        ->as_object()
                        ->execute()
                        ->current();
    }

    public function get_questions() {
        return DB::select()
                        ->from('consultation')
                        ->as_object()
                        ->execute();
    }
   
    public function get_response() {
        return DB::select()
                        ->from('consultation_response')
                        ->as_object()
                        ->execute();
    }
   
    public function add_question($args) {
        unset($args['submit']);
        $args = array_merge(
                array(
                    'pat_name' => '',
                    'pat_email' => '',
                    'question' => '',
                    'date_question' => '',
                ), $args
        );
        return DB::insert('consultation', array_keys($args))
                        ->values(array_values($args))
                        ->execute();
    }
    public function add_response($args) {
        unset($args['submit']);
        $args = array_merge(
                array(
                    'id' => '',
                    'id_cons' => $args['id_cons'],
                    'doc_name' => '',
                    'response' => '',
                    'date_response' => '',
                ), $args
        );
        return DB::insert('consultation_response', array_keys($args))
                        ->values(array_values($args))
                        ->execute();
    }
    public function update_consultation($args) {
        unset($args['submit']);
        //print_r($args);die;
        $args = array_merge(
                array(
                    'id' => '',
                    'response' => '',
                    'doc_name' => '',
                    'date_response'=> '',
                ), $args
        );
        return DB::update('consultation_response')
                        ->set($args)
                        ->where('id', '=', $args['id'])
                        ->execute();
    }

    public function remove_consultation($id) {
         DB::delete('consultation')
                        ->where('id', '=', $id)
                        ->execute();
        return       DB::delete('consultation_response')
                        ->where('id_cons', '=', $id)
                        ->execute();
       
    }
   
    public function remove_response($id) {
         return DB::delete('consultation_response')
                        ->where('id', '=', $id)
                        ->execute();
    }

}


consultation->classes->consultation.php

Код:
<?php defined('SYSPATH') OR die('No direct access allowed.');

class Consultation {


   //protected static $mail;
        public $template = 'v_form';
        //***** Добавить вопрос в базу **/////
   public static function addquestion($data){
            $result = Model::factory('consultation')->add_question($data);
            //echo Debug::vars($result);             
   }
       
        public static function addresponse($data){
            $result = Model::factory('consultation')->add_response($data);
   }
          //****** Вывод Вопроса по id *****//
        public static function showquestion($id){
         
            $consultation = Model::factory('consultation')->get_question($id,'id');
            //print_r($consultation);die;
            return $view = View::factory('v_question')
                 ->bind('consultation', $consultation);     
   }
        //****** Вывод списка вопросов *****//
        public static function showquestions($config = NULL){
            $consultation = Model::factory('consultation')->get_questions();
            //print_r($consultation);die;
            $consultation_response = Model::factory('consultation')->get_response();
            //print_r($consultation);die;
            return $view = View::factory('v_list', array("consultation" => $consultation, "consultation_response" => $consultation_response ));       
           
   }
        //****** Вывод списка вопросов в админке ***//
        public static function admshowquestions($config = NULL){
           
            $consultation = Model::factory('consultation')->get_questions();
            $consultation_response = Model::factory('consultation')->get_response();
            return $view = View::factory('v_adminlist', array("consultation" => $consultation, "consultation_response" => $consultation_response));   
   }
        //****** Выводим ответ***///
        /*
        public static function showresponse($config = NULL){
            $consultation = Model::factory('consultation')->get_response();
            return $view = View::factory('v_list', array("consultation" => $consultation));
   }*/
        //***** Вывод формы для ввода вопроса **//
        public static function showform($config = NULL){     
            return View::factory('v_form');      
   }
        //***** Удаляем вопрос из базы по айди ***//
        public static function del_question($id){
            Model::factory('consultation')->remove_consultation($id);
           
   }
        public static function del_response($id){
            Model::factory('consultation')->remove_response($id);
           
   }
        //***** Возвращает форму для ответа **///
        public static function showresponseform($id){
            $config = Kohana::$config->load('consultation');
            //$page_id = ($config->source == 'query_string') ? $_GET[$config->method] : $this->request->param($config->method);
            $users=$config->users;
            return View::factory('v_responseform', array("id" => $id, "users" => $users));    
   }


} // End


consultation->config->consultation.php

Код:
<?php defined('SYSPATH') or die('No direct access allowed.');

return array(



   'users' => array(
      'Пользователь 1' => 'Пользователь 1', 'Пользователь 2' => 'Пользователь 2'
   ),

);


consultation->views->v_adminlist.php

Код:
<br>
<?php foreach ($consultation as $cons) : ?>

<table width="100%"  cellspacing="10" style="border-top:1px  solid #d9d7d7; border-bottom:1px  solid #d9d7d7; border-right:1px solid #d9d7d7; border-left:1px solid #d9d7d7;">

   
    <tr>
        <td valign="top" width="50px">Имя:</td>
        <td valign="top"><b><?php echo $cons->pat_name; ?></b></td>
        <td><b>Функции</b></td>
    </tr>
   
    <tr>
       
        <td valign="top" width="50px">Вопрос:</td>
        <td valign="top" align="left"><?php echo $cons->question; ?></td>
        <td align="left" width="120px">
        <?=HTML::anchor('admin/consultation/response/'. $cons->id, 'Ответить')?>
        <?=HTML::anchor('admin/consultation/delete/'. $cons->id, 'Удалить')?>
        </td>
   
    </tr>
    <?php foreach ($consultation_response as $response) : ?>
    <? if($response->response!==''&& $cons->id==$response->id_cons){?>
    <table bgcolor="E3E3E3" width="100%"  cellspacing="10" style="border-bottom:1px  solid #d9d7d7; border-right:1px solid #d9d7d7; border-left:1px solid #d9d7d7;">
    <tr>
        <td valign="top" width="50px">Врач:</td>
        <td valign="top"><b><?php echo $response->doc_name; ?></b></td>
    </tr>
   
    <tr>
       
        <td valign="top" width="50px">Ответ:</td>
        <td valign="top" align="left"><?php echo $response->response; ?></td>
        <td align="left" width="120px">
        <?=HTML::anchor('admin/consultation/response_edit/'. $cons->id, 'Редактировать')?>
        <?=HTML::anchor('admin/consultation/delete_response/'. $response->id, 'Удалить')?>
        </td>
   
    </tr>

    </table>
    <?}?>
    <?php endforeach;?>

</table>
<br>
    <?php
    //$consultation->next();
    endforeach;
?>




consultation->views->v_form.php

Код:

<br/>

<br>
<center>
<?$form = Form::open('consultation/index'); // Ваша функция генерации формы
   $form = Antispam::factory($form)->getForm(); // Подготовка формы для ботов
   echo $form; // Ваш способ показа формы
?>
   
   
<div style="width:400px; text-align:left; border:1px solid #CCCCCC; color:#003300; font:12px tahoma, verdana; background:#F5F5F5;">
<div style="text-align:center; background:#708090; border:1px solid #F5F5F5; color:#ffffff; padding:5px 5px 5px 5px;">
Задать вопрос врачу
</div>   
   
        <?=Form::hidden('date_question', date('d.m.Y'), NULL)?>
        <?=Form::label('pat_name', 'Ваше имя', array('style' => 'padding:8px 20px 0px 20px;'))?>:
  <div style="padding:1px 20px 0px 20px;">
        <?=Form::input('pat_name', null, array('style' => 'width:358px; height:20px; background:#FFFFFF; border:1px solid #CCCCCC; color:#191970; outline: none;','size' => '30'))?>
  </div>
        <?=Form::label('pat_email', 'Ваш E-mail', array('style' => 'padding:8px 20px 0px 20px;'))?>:
  <div style="padding:1px 20px 0px 20px;">
        <?=Form::input('pat_email', null, array('style' => 'width:358px; height:20px; background:#FFFFFF; border:1px solid #CCCCCC; color:#191970; outline: none;', 'size' => '30'))?>
  </div>
        <?=Form::label('question', 'Ваш вопрос', array('style' => 'padding:8px 20px 0px 20px;'))?>:

  <div style="padding:1px 20px 0px 20px;">
        <?=Form::textarea('question', null, array('style' => 'width:358px; height:100px; background:#FFFFFF; border:1px solid #CCCCCC; color:#191970; resize: none; outline: none;'))?>
  </div>

  <div style="padding:5px 20px 15px 20px; text-align:center;">
        <?=Form::submit('send', 'Отправить', array('style' => 'cursor:pointer; width:200px; height:35px; font:15px tahoma;'))?>
  </div>
</div>
<?=Form::close()?>
</div>
</center>


consultation->views->v_list.php

Код:
<br>
<?php foreach ($consultation as $cons) : ?>

<table width="100%"  cellspacing="10" style="border-top:1px  solid #d9d7d7; border-bottom:1px  solid #d9d7d7; border-right:1px solid #d9d7d7; border-left:1px solid #d9d7d7;">

   
    <tr>
        <td valign="top" width="50px">Имя:</td>
        <td valign="top"><b><?php echo $cons->pat_name; ?></b></td>
    </tr>
   
    <tr>
       
        <td valign="top" width="50px">Вопрос:</td>
        <td valign="top" align="left"><?php echo $cons->question; ?></td>

   
    </tr>
    <tr>   
        <td align="right" colspan="2" ><?php echo $cons->date_question; ?></td>   
    </tr>
    <?php foreach ($consultation_response as $response) : ?>
    <? if($response->response!==''&& $cons->id==$response->id_cons){?>
    <table bgcolor="E3E3E3" width="100%"  cellspacing="10" style="border-bottom:1px  solid #d9d7d7; border-right:1px solid #d9d7d7; border-left:1px solid #d9d7d7;">
    <tr>
        <td valign="top" width="50px">Врач:</td>
        <td valign="top"><b><?php echo $response->doc_name; ?></b></td>
    </tr>
   
    <tr>
       
        <td valign="top" width="50px">Ответ:</td>
        <td valign="top" align="left"><?php echo $response->response; ?></td>

   
    </tr>
    <tr>   
        <td align="right" colspan="2" ><?php echo $response->date_response; ?></td>   
    </tr>
    </table>
    <?}?>
    <?php endforeach;?>
</table>
<br>
<?php endforeach;?>


consultation->views->v_question.php

Код:
<br>


<table width="100%"  cellspacing="10" style="border-top:1px  solid #d9d7d7; border-right:1px solid #d9d7d7; border-left:1px solid #d9d7d7;">

   
    <tr>
        <td valign="top" width="50px">Имя:</td>
        <td valign="top"><b><?php echo $consultation->pat_name; ?></b></td>
    </tr>
   
    <tr>
       
        <td valign="top" width="50px">Вопрос:</td>
        <td valign="top" align="left"><?php echo $consultation->question; ?></td>

   
    </tr>

</table>


consultation->views->v_responseform.php

Код:
<center>
<?$form = Form::open('admin/consultation/response/'); // Ваша функция генерации формы
   $form = Antispam::factory($form)->getForm(); // Подготовка формы для ботов
   echo $form; // Ваш способ показа формы
?>
   
   
<div style="width:798px; text-align:left; border:1px solid #CCCCCC; color:#003300; font:12px tahoma, verdana; background:#F5F5F5;">
<div style="text-align:center; background:#708090; border:1px solid #F5F5F5; color:#ffffff; padding:5px 5px 5px 5px;">
Ответить
</div> 
        <?=Form::hidden('id_cons', $id, NULL)?>
        <?=Form::label('doc_name', 'Ваше имя', array('style' => 'padding:8px 20px 0px 20px;'))?>:
  <div style="padding:1px 20px 0px 20px;">
        <?=Form::select('doc_name', $users, NULL, array('style' => 'width:358px; height:35px; background:#FFFFFF; border:1px solid #CCCCCC; color:#191970; outline: none;','size' => '1'))?>
  </div>
                <?=Form::label('date_response', 'Дата', array('style' => 'padding:8px 20px 0px 20px;'))?>:
  <div style="padding:1px 20px 0px 20px;">
        <?=Form::input('date_response', date('d.m.Y'), array('style' => 'width:358px; height:35px; background:#FFFFFF; border:1px solid #CCCCCC; color:#191970; outline: none;','size' => '1'))?>
  </div>
 
        <?=Form::label('response', 'Ответ', array('style' => 'padding:8px 20px 0px 20px;'))?>:

  <div style="padding:1px 20px 0px 20px;">
        <?=Form::textarea('response', null, array('style' => 'width:750px; height:200px; background:#FFFFFF; border:1px solid #CCCCCC; color:#191970; resize: none; outline: none;'))?>
  </div>

  <div style="padding:5px 20px 15px 20px; text-align:center;">
        <?=Form::submit('send', 'Отправить', array('style' => 'cursor:pointer; width:200px; height:35px; font:15px tahoma;'))?>
  </div>
</div>
<?=Form::close()?>
</div>
</center>


consultation.sql
Код:
CREATE TABLE IF NOT EXISTS `consultation` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `pat_email` varchar(254) NOT NULL,
  `pat_name` varchar(32) NOT NULL DEFAULT '',
  `question` text NOT NULL,
  `date_question` varchar(15) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

CREATE TABLE IF NOT EXISTS `consultation_response` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `id_cons` int(11) unsigned NOT NULL,
  `doc_name` varchar(32) NOT NULL,
  `response` text NOT NULL,
  `date_response` varchar(15) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

Автор:  rain2 [ 11 авг 2012, 21:26 ]
Заголовок сообщения:  Re: Модуль "Онлайн консультация".

Все в принципе работает, скоро переделаю на ORM, и добавлю дизайн. Жду советов, наставлений на путь истинный и исправлений!!!

PS: Пагинацию и проверку форм еще не приделал, пока читаю документацию...

Модуль в работе можно посмотреть здесь http://densim.org.ua/consultation

Автор:  Sergey [ 12 авг 2012, 12:13 ]
Заголовок сообщения:  Re: Модуль "Онлайн консультация".

Почему нет проверки у коментатора на наличие записи MX на сервере его почтового ящика? Любой email придумать можно. Так вас заспамят. И капчу нужно. Вообще валидация работает какая нибудь?

Автор:  rain2 [ 12 авг 2012, 12:30 ]
Заголовок сообщения:  Re: Модуль "Онлайн консультация".

Пока валидации нет, просто проверяет поля на заполнение, есть проверка на роботов. Сергей, подскажите как сделать проверку на наличие записи МХ на сервере почтового ящика?

Автор:  Sergey [ 12 авг 2012, 13:34 ]
Заголовок сообщения:  Re: Модуль "Онлайн консультация".

rain2 писал(а):
Сергей, подскажите как сделать проверку на наличие записи МХ на сервере почтового ящика?


Код:
     
// validate
$post = Validation::factory($_POST)
   ->rule('email', 'email')
   ->rule('email', 'email_domain');

if ($post->check())
{
   // save
   $model = ORM::factory('user');
   $model->values(array('email' => $post['email'],));

   ...
   ...
   ...
}


Страница 1 из 2 Часовой пояс: UTC + 4 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/