Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 05 июл 2025, 15:47

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 11 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Модуль "Онлайн консультация".
СообщениеДобавлено: 09 авг 2012, 22:17 
Не в сети
Бывалый

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

Таблица в базе данных будет содержать поля
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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль "Онлайн консультация".
СообщениеДобавлено: 10 авг 2012, 00:20 
Не в сети
Бывалый

Зарегистрирован: 09 авг 2012, 13:17
Сообщения: 43
Создаем модель 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();
    }

}




Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль "Онлайн консультация".
СообщениеДобавлено: 10 авг 2012, 00:50 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
rain2 писал(а):
Создаю модуль consultation c папками classes, config, views

+ model
+init.php

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

consultation.php

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль "Онлайн консультация".
СообщениеДобавлено: 10 авг 2012, 01:34 
Не в сети
Бывалый

Зарегистрирован: 09 авг 2012, 13:17
Сообщения: 43
Sergey писал(а):

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


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль "Онлайн консультация".
СообщениеДобавлено: 10 авг 2012, 06:37 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
rain2 писал(а):
я же написал что я не программист


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль "Онлайн консультация".
СообщениеДобавлено: 11 авг 2012, 21:22 
Не в сети
Бывалый

Зарегистрирован: 09 авг 2012, 13:17
Сообщения: 43
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;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль "Онлайн консультация".
СообщениеДобавлено: 11 авг 2012, 21:26 
Не в сети
Бывалый

Зарегистрирован: 09 авг 2012, 13:17
Сообщения: 43
Все в принципе работает, скоро переделаю на ORM, и добавлю дизайн. Жду советов, наставлений на путь истинный и исправлений!!!

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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль "Онлайн консультация".
СообщениеДобавлено: 12 авг 2012, 12:13 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
Почему нет проверки у коментатора на наличие записи MX на сервере его почтового ящика? Любой email придумать можно. Так вас заспамят. И капчу нужно. Вообще валидация работает какая нибудь?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль "Онлайн консультация".
СообщениеДобавлено: 12 авг 2012, 12:30 
Не в сети
Бывалый

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль "Онлайн консультация".
СообщениеДобавлено: 12 авг 2012, 13:34 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 24 июл 2012, 18:00
Сообщения: 701
Откуда: Murom, Russia
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'],));

   ...
   ...
   ...
}



Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group