Снипет выбора записей из ближайшего контейнера

Как то раз надо было написать снипет который позволял делать линковку на сайте как например вот на этом сайте http://www.aviavi.ru внизу где надпись другие маршруты (это делалось для продвижения)

Структура сайта была очень легкой и поэтому я быстро все сделал (вот такая структура была 102 города и в каждом ещё 102 города, это для продвижения нужно было так сделать)  причем id были сделаны тоже в ряд типа

1 город id=1 (являеться контейнером) и в этом контейнере ещё 102 города с id 2, 3, 4,  и так далее.

и теперь сам код снипета:

$results2 = $modx->getDocumentChildren(

$id = 0,

$active = 1,

$deleted = 0,

'id, pagetitle, published, menuindex, deleted, hidemenu, menutitle', // Выбираем поля из БД

$where = 'hidemenu = 0',

$sort='menuindex',

$dir='',

$limit = ''

);

$i=0;

foreach($results2 as $key => $value2) {

if ($i==1) { $boxid=$value2["id"]; $i++;}

if ($value2["id"]== $startId) { $i++; }

}

if ($i<1) {foreach($results2 as $key => $value2) {

$i++;

if ($i==1) { $boxid=$value2["id"]; $i++;}

}       }

$txt = $modx->getDocument($boxid);

$i=0;

$startId+=0;

$raz=$startId+102-$idcity;

$onecity=$boxid+$raz;

$results = $modx->getDocumentChildren(

$id = $boxid,

$active = 1,

$deleted = 0,

'id, pagetitle, published, menuindex, deleted, hidemenu, menutitle',

$where = 'hidemenu = 0',

$sort='id',

$dir='ASC',

$limit = ''

);

$items = "";

$output = "";

$k=0;

foreach($results as $key => $value) {

if ($value["id"]>=$onecity) { if ($k<3) { $k++;

$items .= "<li>

<a href=\"[(base_url)][~".$value["id"]."~]\" title=\"".$value["pagetitle"]."\">Авиабилеты ".$txt['longtitle']."-".$value["pagetitle"]."

<span class=\"tab-l\"></span><span class=\"tab-r\"></span></a></li>\n";

}}}

if ($k<3) {   foreach($results as $key => $value) {

if  ($k<3) {  $k++;

$items .= "<li>

<a href=\"[(base_url)][~".$value["id"]."~]\" title=\"".$value["pagetitle"]."\">Авиабилеты ".$txt['longtitle']."-".$value["pagetitle"]."

<span class=\"tab-l\"></span><span class=\"tab-r\"></span></a></li>\n";

}}   }

if ($items != "") {

$output = "<ul class=\"box\">\n";

$output .= $items;

$output .= "</ul>\n";

}

return $output;

Вызов сниппета из шаблона
[[pr?&startId=`[*parent*]` &idcity=`[*id*]` ]]

Пояснения:

Из шаблоны передаем id контейнера в котором находимся и идентификатор документа и
Использовал API getDocumentChildren для вывода из базы все записи о родителя то есть контейнеров потом с помощью цикла брал следующий контейнер после данного (по id определял startId) записывал его id потом выбирал из полученного контейнера все записи причем записи именно те которые нужно по порядковому номеру. Короче я запутался объяснять посмотрите код разбирайтесь если что спрашивайте.

Отправить комментарий