Symfony::Поиск. Часть 1
На русском языке довольно сложно найти информацию о простой реализации поиска по базе данных, используя фрейморк Symfony. В официальном гайде используется Zend Lucene – поисковой движок от Zend, но для многих сайтов его функционал избыточен, да и подключение к проекту Symfony не совсем очевидно.
В данной статье мы рассмотрим простую реализацию полнотекстового поиска с использование фреймворка Symfony и ORM Doctrine.
Схема таблицы
Для примера, поиск будет осуществляться по некоторой таблице article. Ее схема:
- StArticle:
- actAs:
- Timestampable: ~
- columns:
- title:
- type: string(255)
- notnull: true
- text:
- type: string
- notnull: true
Для возможности реализации поиска, нужно добавить поведение Searchable:
- StArticle:
- actAs:
- # ...
- Searchable:
- fields: [title, text]
- analyzer: Doctrine_Search_Analyzer_Utf8
- # ...
В fields задаются поля, по которым осуществляется поиск. В analyzer задается так называемый «анализатор» текста. То, что мы задали Doctrine_Search_Analyzer_Utf8, позволит избежать возможных проблем с кириллицей. К слову говоря, можно определить и собственный анализатор, достаточно наследоваться от интерфейса Doctrine_Search_Analyzer_Interface и переопределить метод analyze():
- class MyAnalyzer implements Doctrine_Search_Analyzer_Interface
- {
- public function analyze($text)
- {
- $text = trim($text);
- return $text;
- }
- }
Теперь схема таблицы полностью готова и подходит для поиска. После генерации и выполнения SQL кода (doctrine:build –all) в базе появится таблица Article и так же создастся таблица article_index - так называемый полнотекстовый индекс – словарь, в котором перечислены слова и указано, в каких местах они встречаются.
Поиск в Doctrine
Поиск будет реализован при помощи метода search, определенного в классе Doctrine_Search...
php, symfony, doctrineJavaScript::Постраничная навигация. Часть 2
Ранее, в цикле статей, посвященных созданию скрипта постраничной навигации на основе scroll bar'a, были рассмотрены основные требования и выбрана наиболее оптимальная html разметка для пагинатора. В данной заключительной статье мы напишем сам скрипт.
Для начала, нам нужно подготовить место для тестирования. Если есть возможность работать с php, то лучше изменить разрешение созданной нами ранее html странички на .php, и закинуть ее вместе со всеми файлами на сервер.
Поместим в body следующий код:
- <div id="blocks_place">
- <div id="link_block">
- <?php
- for ( $i = 1; $i <= 200; $i++ ) {
- echo '<a href="#">' . $i . '</a>';
- }
- ?>
- </div>
- </div>
- <div id="slider"></div>
Как видно, это разметка удовлетворяет требованиям, поставленным в первой части цикла. Также для удобства тестирования, при помощи php, создается 200 ссылок на страницы.
Для нормального внешнего вида добавим стили:
- #blocks_place {
- height: 30px;
- padding: 0;
- overflow: hidden;
- }
- #link_block {
- height: 30px;
- overflow: hidden;
- }
- #link_block a {
- margin-right: 6px;
- float: left;
- height: 20px;
- overflow: hidden;
- width: 40px;
- text-align: center;
- padding-top: 3px;
- color: #000;
- font-family: arial;
- font-size: 12px;
- background-color: #eee;
- }
Создадим в папке js новый файл st-paginator.js. В нем и будет код скрипта постраничной навигации. Подключим этот файл в разделе head.
- <script src="js/st-paginator.js" type="text/javascript"></script>
StPaginator
Перейдем непосредственно, к написанию скрипта. В файле st-paginator.js создадим функцию StPaginator, она будет принимать объект settings.
- function StPaginator( settings ) {
- }
Рассмотрим свойства принимаемого объекта.
Count – общее количество страниц.
Visible – количество ссылок на страницы, отображаемых одновременно. Параметр необязательный, по умолчанию – 11.
Width – ширина ссылки на страницу, с учетом всех отступов (в пикселях).
Current – номер текущей страницы. Необязательный, по умолчанию – 1...
php, jquery, javascriptPHP::SimpleXML. Часть 2. XML дерево
В заключительной части цикла статей посвященного работе с SimpleXML, будет рассмотрена довольно распространенная задача: построение XML дерева.
Требования
- Отображение в виде дерева содержимого любого XMLфайла с правильной структурой;
- Возможность сворачивать и разворачивать ветви;
- Атрибуты элементы выводятся в строку рядом с ним;
- Текст элемента так же пишется рядом с названием элемента, но в скобках;
Для того, что бы лучше понять, что же все-таки мы хотим сделать, можно посмотреть на уже готовый пример: http://st-programming.ru/simple_xml/index.php

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