Symfony::Поиск. Часть 1

На русском языке довольно сложно найти информацию о простой реализации поиска по базе данных, используя фрейморк Symfony. В официальном гайде используется Zend Lucene – поисковой движок от Zend, но для многих сайтов его функционал избыточен, да и подключение к проекту Symfony не совсем очевидно.

В данной статье мы рассмотрим простую реализацию полнотекстового поиска с использование фреймворка Symfony и ORM Doctrine.

Схема таблицы

Для примера, поиск будет осуществляться по некоторой таблице article. Ее схема:

  1. StArticle:
  2.   actAs:
  3.     Timestampable: ~
  4.   columns:
  5.     title:
  6.       type: string(255)
  7.       notnull:  true
  8.     text:
  9.       type: string
  10.       notnull: true

Для возможности реализации поиска, нужно добавить поведение Searchable:

  1. StArticle:
  2.   actAs:
  3.     # ...
  4.     Searchable:
  5.       fields: [title, text]
  6.       analyzer: Doctrine_Search_Analyzer_Utf8
  7. # ...

В fields задаются поля, по которым осуществляется поиск. В analyzer задается так называемый «анализатор» текста. То, что мы задали Doctrine_Search_Analyzer_Utf8, позволит избежать возможных проблем с кириллицей. К слову говоря, можно определить и собственный анализатор, достаточно наследоваться от интерфейса Doctrine_Search_Analyzer_Interface и переопределить метод analyze():

  1. class MyAnalyzer implements Doctrine_Search_Analyzer_Interface
  2. {
  3.     public function analyze($text)
  4.     {
  5.         $text = trim($text);
  6.         return $text;
  7.     }
  8. }

Теперь схема таблицы полностью готова и подходит для поиска. После генерации и выполнения SQL кода (doctrine:build –all) в базе появится таблица Article и так же создастся таблица article_index - так называемый полнотекстовый индекс – словарь, в котором перечислены слова и указано, в каких местах они встречаются.

Поиск в Doctrine

Поиск будет реализован при помощи метода search, определенного в классе Doctrine_Search...

php, symfony, doctrine

JavaScript::Постраничная навигация. Часть 2

Ранее, в цикле статей, посвященных созданию скрипта постраничной навигации на основе scroll bar'a, были рассмотрены основные требования и выбрана наиболее оптимальная html разметка для пагинатора. В данной заключительной статье мы напишем сам скрипт.

Для начала, нам нужно подготовить место для тестирования. Если есть возможность работать с php, то лучше изменить разрешение созданной нами ранее html странички на .php, и закинуть ее вместе со всеми файлами на сервер.

Поместим в body следующий код:

  1. <div id="blocks_place">
  2.     <div id="link_block">
  3.         <?php
  4.         for ( $i = 1; $i <= 200; $i++ ) {
  5.             echo '<a href="#">' . $i . '</a>';
  6.         }
  7.         ?>
  8.     </div>
  9. </div>
  10. <div id="slider"></div>

Как видно, это разметка удовлетворяет требованиям, поставленным в первой части цикла. Также для удобства тестирования, при  помощи php, создается 200 ссылок на страницы.

Для нормального внешнего вида добавим стили:

  1. #blocks_place {
  2.     height: 30px;
  3.     padding: 0;
  4.     overflow: hidden;
  5. }
  6.  
  7. #link_block {
  8.     height: 30px;
  9.     overflow: hidden;
  10. }
  11.  
  12. #link_block a {
  13.     margin-right: 6px;
  14.     float: left;
  15.     height: 20px;
  16.     overflow: hidden;
  17.     width: 40px;
  18.     text-align: center;
  19.     padding-top: 3px;
  20.     color: #000;
  21.     font-family: arial;
  22.     font-size: 12px;
  23.     background-color: #eee;
  24. }

Создадим в папке js новый файл st-paginator.js. В нем и будет код скрипта постраничной навигации. Подключим этот файл в разделе head.

  1. <script src="js/st-paginator.js" type="text/javascript"></script>

StPaginator

Перейдем непосредственно, к написанию скрипта. В файле st-paginator.js создадим функцию StPaginator, она будет принимать объект settings.

  1. function StPaginator( settings ) {
  2.  
  3. }

Рассмотрим свойства принимаемого объекта.

Count – общее количество страниц.

Visible – количество ссылок на страницы, отображаемых одновременно. Параметр необязательный, по умолчанию – 11.

Width – ширина ссылки на страницу, с учетом всех отступов (в пикселях).

Current – номер текущей страницы. Необязательный, по умолчанию – 1...

php, jquery, javascript

PHP::SimpleXML. Часть 2. XML дерево

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

Требования

  • Отображение в виде дерева содержимого любого XMLфайла с правильной структурой;
  • Возможность сворачивать и разворачивать ветви;
  • Атрибуты элементы выводятся в строку рядом с ним;
  • Текст элемента так же пишется рядом с названием элемента, но в скобках;

Для того, что бы лучше понять, что же все-таки мы хотим сделать, можно посмотреть на уже готовый пример: http://st-programming.ru/simple_xml/index.php

Как видно, здесь в качестве примера используется все тот же файл с рецептом.

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

xml, алгоритмы, php, jquery