РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ
Карта сайта
Система управления web-сайтом WebDirector
Главная
|
Быстрый старт
|
Руководство администратора
|
Руководство разработчика
|
Руководство SEO
|
FAQ
»Подключение внешних скриптов и API
    Подключение скриптов
  »Динамические каталоги и фильтрация
Главная > Руководство разработчика > Подключение внешних скриптов и API > Динамические каталоги и фильтрация

Как сделать динамическую выборку из элементов структуры WD

Тестовый пример скрипта Вы можете скачать здесь testfilter.zip.

1.   Создайте файл под названием testfilter.inc.php и поместите его в папку

      /wd_blocks.

2.  В шаблоне (то есть в той области, где появится форма поиска и результаты

     поиска) пропишите инструкцию  [REQ  wd_blocks/testfilter.inc.php].

3.  В файле testfilter.inc.php  напишите:

       include_once (WD_SYSROOT.”core/syslite.inc.php”);
       wddb_InitFromSession(‘mdl_content’);

Поиск – выборку можно осуществить двумя способами, а именно либо используя в 
тексте файла testfilter.inc.php функцию:

       wddb_ItemsTbl($sMdlName, $sItemSID=’root’, $iDeep=1, 
                     $bNeedColumns=0, $bNeedSpecials=0,  $bNeedText=0,
                    
$bNeedDisableds=0);

 либо функции   

       mainitems_Descendants($sMdlName, $sItemSID, $bNonHiddens=0,
                           
$iFolders=0, $iFlag=-1, $sRestrictField=””,
                            $iStartDeep=0, $iDeep=0);

       mainitems__ItemContent($sMdlName, $sItemSID, $sPrefix=””);


Преимущества есть и у первого и у второго способа. Используя первый способ, Вы имеете возможность сразу получить значения свойств объектов в табличном виде. Но при этом фильтрацию нужно задавать самим. Выполняя поиск вторым способом, Вы задаете ОДИН фильтр непосредственно на стадии выборки элементов, но вынуждены использовать многократно еще одну функцию для получения свойств каждого объекта.

Поиск-выборка при помощи способа 1.

Выполняя выборку способом №1, Вы получите  массив всех элементов определенной ветки (на определенную глубину) со значениями всех их свойств.

Описание параметров функции:

      wddb_ItemsTbl($sMdlName, $sItemSID=’root’, $iDeep=1, 
                    $bNeedColumns=0, $bNeedSpecials=0,
                    $bNeedText=0,
$bNeedDisableds=0);

$sMdlName всегда должен быть WD_STDMDL_MAIN;

$sItemSID
- ук
азывает, среди потомков какой рубрики производить выборку. Чтобы получить номер текущей страницы (sid), укажите константу WD_CURRPG_SID; sid корня всегда равен root; sid родительской рубрики – функция  mainitems_ParentSid($sSid); sid’ы  всех предков – mainitems_Ancestry($sMdlName, $sItemSID);

$iDeep – глубина уровней, на которые будет производится выборка: 0 – на всю глубину; 1 – только непосредственно «детей» элемента $sItemSID; 2,3,… - соответсвенно на 2, 3, … уровня иерархии);

$bNeedColumns определяет искать ли совпадения в рубриках (иначе поиск осуществляется только по страницам);

$bNeedSpecialsискать ли совпадения в содержимом спецполей (обычно ставится 0, поскольку в содержимом нет содержательной информации);

$bNeedText – искать ли совпадения в поле text (обычно редко  фильтруют по этому полю, поэтому ставится 0 – не искать);

$bNeedDisabledsискать ли «невидимые» (неактивные) страницы и рубрики;

Функция wddb_ItemsTbl  возвращает двумерный массив, состоящий из ключа – sid каждой
страницы, удовлетворяющей поиску, и значения – массив свойств этой страницы, который в свою очередь представляет собой совокупность ключей – имя свойства – и значений – значение свойства.

Если одно свойство определено для каких-то элементов, а для других – нет, то в массив кладется NULL.

Кроме того, каждому элементу массива (sid’у страницы) соответствуют (в том же массиве) ключи: name – имя элемента (название, находящееся в меню), disabled – видим ли элемент или нет, link – url html – страницы элемента.

После работаем средствами php с двумерным массивом для формирования вывода.

Поиск-выборка при помощи способа 2. 

Используя функцию mainitems_Descendants, получаем список sid’ов страниц, удовлетворяющих критериям поиска, а затем с помощью функции mainitems__ItemContent по каждому сиду получаем персонально информацию о странице.

Описание параметров функции

          mainitems_Descendants($sMdlName, $sItemSID, $bNonHiddens=0,
                                $iFolders=0, $iFlag=-1,
                                $sRestrictField=””, $iStartDeep=0,
                                $iDeep=0);

$sMdlName всегда должен быть WD_STDMDL_MAIN;

$sItemSID - ук
азывает, среди потомков какой рубрики производить выборку. Чтобы получить номер текущей страницы (sid), укажите константу WD_CURRPG_SID; sid корня всегда равен root; sid родительской рубрики – функция  mainitems_ParentSid($sSid); sid’ы  всех предков – mainitems_Ancestry($sMdlName, $sItemSID);

$
bNonHiddensискать только среди активных («видимых») страниц и рубрик  (1 – искать среди активных, 0 – среди всех);

$iFolders0 – выбирать любые элементы, 1 – только рубрики, 2 – только страницы;

$iFlagвыбираем к какому флагу привязаться (выбираются только те элементы, у которых флаг выставлен = “ON”): -1 – ни к какому, 0 – видимость (Флаг - «Доступность страницы для посетителя», то же самое, что и $bNonHiddens), 1 - страница участвует в горизонтальном меню-1, 2 - страница участвует в горизонтальном меню-2, 3 – страница участвует в вертикальном меню, 4 – к флагу «страница участвует в каталогах»;

$sRestrictField-  строка – фильтр вида ИМЯ_ПОЛЯ-УСЛОВИЕ-ЗНАЧЕНИЕ, например, size>=25 или color=красный.Условие может быть: =, <>, >, <, >=, <=. При этом строка фильтрует только по одному полю. Если поле ИМЯ_ПОЛЯ не существует для элемента, то условие считается невыполненным;

$iStartDeep устанавливается 0;

$iDeep – глубина уровней, на которые будет производится выборка (0 – на всю глубину; 1 – только непосредственно «детей» элемента $sItemSID; 2,3,… - соответсвенно на 2, 3, … уровня иерархии);

Функция  mainitems_Descendants возвращает массив sid’ов найденных элементов. По каждму из элементов вызывается функция
 

            mainitems__ItemContent($sMdlName, $sItemSID, $sPrefix=””)
 
с параметрами WD_STDMDL_MAIN  и sid’ом. Фукция возвращает массив значений всех полей элемента sid  в виде КЛЮЧ – название поля, ЗНАЧЕНИЕ – значение поля. Если указать параметр $sPrefix = «ИМЯ_ПОЛЯ», то вернется массив только с этим полем.

Для получения URL страницы по ее sid’у используется функция

           mainitems_RepresPath($sMdlName,$sItemSID,$bFolder=0,$bHTTP=0).
 
Параметры функции:

$sMdlName всегда должен быть WD_STDMDL_MAIN;

$sItemSID sid страницы, для которой определяется URL;

$bFolderесли  равен 1, возвращается путь к рубрике, 0 – к странице;

$bHTTP- если  равен 1, возвращается URL, 0 – путь по файловой системе;

Далее, работая с массивом средствами php, формируем html – вывод результаты.

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

Тестовый пример

Для иллюстрации вышеприведенной инструкции был создан тестовый скрипт, на примере которого можно посмотреть работу поиска - выборки.
Тестовый скрипт  вы можете скачать здесь testfilter.zip.

Поместите его в директорию /wd_blocks.

Пропишите на странице "Каталог товаров"   [REQ  wd_blocks/testfilter.inc.php].

Вы получите форму:




С помощью этой формы можно произвести выборку по двум критериям в каталоге товаров.

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