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

Поиск по сайту
http://forum.kohanaframework.su/viewtopic.php?f=38&t=521
Страница 1 из 4

Автор:  websto [ 20 дек 2012, 15:49 ]
Заголовок сообщения:  Поиск по сайту

Условие - таблица должна быть MyISAM, колонки поиска проиндексированы(FULLTEXT).

Форма

Код:
 <form action='/search'>
            <input name="text" type="text">
            <input type="submit" value="GO" >
         </form>



Контроллер

Код:
class Controller_Search extends Controller_Template
{
   

    public function action_search()
   {

      $search = !empty($_REQUEST['text']) ? mysql_real_escape_string(trim(strip_tags($_REQUEST['text']))) : NULL;
      
       $content = View::factory('/pages/do_search');

     if (empty($search) || strlen($search) < 4) /*Как вариант,можна вывод ошибок сделать и по-другому*/
      {
        $meta = "Поисковый запрос не введён, либо он менее 4-х символов";
      }
      else
      {
          $meta = "Поиск по запросу -  $search";
      }
        $sql = "SELECT * FROM table WHERE MATCH(title) AGAINST('$search') LIMIT 20";//title колонка таблицы поиска
      $query = DB::query(Database::SELECT, $sql)
                  ->execute();

                  $cat = $query->as_array();

              $this->template->title = "Поиск по запросу -  $search";
              $content ->cat = $cat;
                                  $content ->meta = $meta;
              $this->template->content = $content;
   }
}



Файл вида do_search


Код:
<h2><?php if (isset($meta))  {echo $meta;}?></h2>
 <?php
            if (!empty($cat))

        foreach($cat as $art):
            ?>
/*Чего то выводим!!!!*/

<?php endforeach;  else echo "<h1 align='center'>Информация по запросу не найдена</h1>";?>




Роут


Код:
Route::set('do_search', 'search(/<artname>)', array('artname' => '.*')) // stuff
    ->defaults(array(
    'controller'  => 'search',
    'action' => 'search',
        ));

Автор:  AmberLEX [ 27 дек 2012, 10:49 ]
Заголовок сообщения:  Re: Поиск по сайту

Зачем вам фреймворк, если вы его не используете?
Это не пример кода - это безобразие.

Автор:  websto [ 28 дек 2012, 12:56 ]
Заголовок сообщения:  Re: Поиск по сайту

Извините уважаемый что не соответствую вашим представлениям правильного кодинга!Не все такие умные как вы,есть люди из средними способностями и даже ниже среднего.Это рабочий код, как пример может кому-то пригодится.А вообще что не так,то что я не использовал хелперы и валидатор?Объясните дураку!

Автор:  AmberLEX [ 28 дек 2012, 13:16 ]
Заголовок сообщения:  Re: Поиск по сайту

Я не писал о "своих представлениях правильного кодинга"
Вы его оформите для начала, чтобы можно было прочитать (это по поводу безобразия)
Для кода есть тег [ code=php ]...[/code] (без пробелов перед скобками)
Цитата:
А вообще что не так

- mysql_real_escape_string (http://kohanaframework.org/3.2/guide/da ... ameterized)

- $search = !empty($_REQUEST['text']) ? mysql_real_escape_string(trim(strip_tags($_REQUEST['text']))) : NULL;
Для этого есть хелпер $search = trim(strip_tags(Arr::get($_GET, 'text')));, где уже проверяется наличие $_GET['text'] и возвращает NULL если нет

- Зачем if (empty($search) || strlen($search) < 4) если запрос потом все равно выполняется

- Зачем if (isset($meta)) - если он всегда установлен

Код:
<h2><?php echo $meta ?></h2>

<?php if (empty($cat)): ?>

    <h1 align='center'>Информация по запросу не найдена</h1>

<?php else: ?>

    <?php foreach($cat as $art): ?>

        /*Чего то выводим!!!!*/
        <h3><?php echo $art['title'] ?></h3>

    <?php endforeach ?>

<?php endif ?>

Вообще мое мнение, если что-то выложил для всеобщего обозрения, тем более "пример кода", то нужно хоть как-то уважать читающих, а не вывалить гору неформатированного текста.

А код рабочий, я не спорю)
Давайте вы наведете порядок в нем учитывая пожелания, а потом его приведем (если понадобится) в оптимизированное решение готове для использования.

Автор:  AmberLEX [ 28 дек 2012, 16:18 ]
Заголовок сообщения:  Re: Поиск по сайту

В общем понятно: "а нас - рать!", главное работает)
После праздников и бодуна выложу стандартный пример для поиска (тем более prickle тоже решала и решила, насколько я знаю) ).

Автор:  websto [ 28 дек 2012, 20:23 ]
Заголовок сообщения:  Re: Поиск по сайту

В принцепе вы правы - главное работает,естетическая красота для меня на втором плане.

Цитата:
Зачем if (empty($search) || strlen($search) < 4) если запрос потом все равно выполняется


Вы знаете как работает MATCH AGAINST ?

Не вижу большой разницы между

Код:
<?php if (empty($cat)): ?>

    <h1 align='center'>Информация по запросу не найдена</h1>

<?php else: ?>

    <?php foreach($cat as $art): ?>

        /*Чего то выводим!!!!*/
        <h3><?php echo $art['title'] ?></h3>

    <?php endforeach ?>

<?php endif ?>


и

Код:
<?php
            if (!empty($cat))

        foreach($cat as $art):
            ?>
/*Чего то выводим!!!!*/

<?php endforeach;  else echo "<h1 align='center'>Информация по запросу не найдена</h1>";?>

Это знаете как почерк он у каждого свой! И по-вашему получается если человек не использует некоторие хелперы значит фреймворк зря используется!?Это круто!!!Прежде всего я хотел передать сам алгоритм поиска,как вариант а с кодом можна делать что угодно,использовать хелпер или не использовать.Лично мне удобней так!Может вы не в курсе но Кохана от версии к версии обновляется и иногда бывает такое что в новой версии забудут добавить например какой небудь хелпер.

Автор:  admin [ 30 дек 2012, 20:58 ]
Заголовок сообщения:  Re: Поиск по сайту

У Попова тоже код работает :)
Но его почему-то не любит большинство программистов и ненавидят те, кто потом разбирается в коде его последователей :)
Впрочем у всех нас поначалу код был далек от идеала. Постоянное совершенствование - в этом весь цимус.

Автор:  AmberLEX [ 04 янв 2013, 12:35 ]
Заголовок сообщения:  Re: Поиск по сайту

Цитата:
Не вижу большой разницы между
Ну не знаю, когда после кого-то такой код смотришь, думаешь, блин, неужели сложно нормально отступы хотя бы сделать, чтоб читать легко было. Ну это ваше дело, хотя, когда вы в код коханы смотрите там тоже так?) Вот бы они так писали, а вы вместо того, чтобы сразу увидеть что к чему искали где заканчивается, а где начинается строка (в принципе, в IDE это можно и выровнять быстро). Хотя это просто соглашение о нотации кода (но его не просто так придумали).
Цитата:
И по-вашему получается если человек не использует некоторие хелперы значит фреймворк зря используется!
А почему бы и не стараться использовать? Для этого же писали фреймворк? Я тоже не всё, естесственно, использую, но стараюсь, тем более, если это к стати и вы сами почти так написали)
Код:
    public static function get($array, $key, $default = NULL)
    {
        return isset($array[$key]) ? $array[$key] : $default;
    }
 
В вашем конкретном случае, вроде удобно использовать. Я это простое классное) решение использую, даже когда без фреймворка пишу)
Если начинаешь изучение, то о них можно элементарно и не знать. И как скзал admin: "у всех нас поначалу код был далек от идеала" Я подсказал, ну типа че не используете)).
И вы так "агрессивно" реагируете, вроде я от балды пишу какую-то хрень бесполезную и не нужную))
Код:
Вы знаете как работает MATCH AGAINST ?
Если честно, ни разу не использовал (не требовалось) Ну вроде представляю. Утверждать не буду, но если принимать настройки mysql по умолчанию, он не найдет строку < 3 или 4-х символов.
Ну я не к тому, а к тому, что если if (empty($search) || strlen($search) < 4) логично в else поместить и сам запрос.
Цитата:
Может вы не в курсе но Кохана от версии к версии обновляется и иногда бывает такое что в новой версии забудут добавить например какой небудь хелпер.
Да я не то что не в курсе, я вообще в шоке как она обновляется!)))) Я уже начал смотреть Laravel, то что видел - понравилось. Ну они (он) явно у коханы много позаимствовали) На рутрекере есть 2 видео обучалки (скачал чтоб быстро в курс дела войти). И то, что я писал сам для коханы, там уже есть и тоже все просто и лаконично.

Автор:  websto [ 04 янв 2013, 20:18 ]
Заголовок сообщения:  Re: Поиск по сайту

Цитата:
Зачем вам фреймворк, если вы его не используете?
Это не пример кода - это безобразие.


Это по-моему тоже немного агрессивно.

Кохана меня тем и подкупила что это гибкий,легкий фреймворк,нет никаких строгих правил.Я уверен в одном, единственное что не изменится в Кохане - это сам ПХП.Да нужно использовать все возможности фреймворка,но это же не обязательно.На счет кода согласен,он далек от идеала. Основная цель была показать решение задачи,просто не встречал нигде "поиска", думал может кому-то пригодиться.

Автор:  prickle [ 26 мар 2013, 14:38 ]
Заголовок сообщения:  Re: Поиск по сайту

а как сделать так, чтобы не результат поиска выводился, а делался редирект на страницу с найденным материалом???

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