"Уже сегодня делай то, о чем другие будут думать завтра!"

Похожие статьи в Articles по тегам

Сайдбар

Предположим у нас имеется блог, базирующийся на сниппете Articles. И нам исключительно нужно рядом с доскональным описанием статьи выводить перечень схожих статей.
При данном схожесть статей обязана складываться путем сопоставления набора тегов нынешней статьи и наборов тегов иных статей.

<В свою очередь более схожие статьи должны выводиться выше собственных конкурентов.

Для исполнения этой задачи необходимо написать простенький сниппет. Именуем его SimilarPosts.

Мысль сниппета заключается в том, чтобы попеременно доставать наборы тегов для статей, которые входят в наш блог. И сопоставлять любой тег текущей статьи с любым тегом рассматриваемого набора. И естественно при совпадении добавлять к счетчику единичку, а потом записывать данное значение в массив для ключа, которое считается id рассматриваемой статьи.

Нужно заметить, что набор тегов для всякой статьи при применении Articles по умолчанию находится в добавочном параметре articlestags. Перейдем конкретно к коду сниппета SimilarPosts.

<code>//диагностика характеристик вызова сниппета
//получение параметра id родителя статьи
$myparentId = isset( $myparentId ) ? $myparentId : $modx->resource->get('parent');
//получение имени шаблона для элемента перечня схожих статей
$tpl = isset( $tpl ) ? $tpl : '';
//получение параметра id текущей странички
$myId = isset( $myId )? $myId: $modx->resource->get('id');
//получение предельной численности элементов в списке схожих статей
$limit= isset( $limit )? $limit: '10';
//проверка введения имя шаблона
if(empty($tpl)){
return 'Ввод имени шаблона для вывода ресурсов: &tpl=`name_tpl`';
}
//получения id дочерних страничек для родителя с id = $myparentIdи depth= 1
$idsAr=$modx->getChildIds($myparentId ,'1',array('1'));
//получение набора тегов текущей страницы
$tagsStr = $modx->resource->getTVValue('articlestags');
//удаляем пробелы внутри строчки (путем обследования на присутствие и подменой на пустоту)
while ( strpos($tagsStr,' ')!==false )
{
$tagsStr = str_replace(' ','',$tagsStr);
};
//проверка на наличие  тегов (тоесть запятая) и разбиение в данном случае строчки на массив тегов
if (strpos($tagsStr,',')!==false){
$tagsAr = explode(",", $tagsStr);
}
//напротив немедленно присваиваем значение тега (в случае если он там один)
else{
$tagsAr[0] = $tagsStr;
}
//в цикле получаем наборы тегов для любого дочернего ресурса из массива $idsAr
foreach ($idsAr as $Id){
$resource = $modx->getObject('modResource', $Id);
$tagsTStr = $resource->getTVValue('articlestags');
while ( strpos($tagsTStr,' ')!==false )
{
$tagsTStr = str_replace(' ','',$tagsTStr);
};
if (strpos($tagsTStr,',')!==false){э
// чистим массив пред записью нового набора тегов
$tagsTAr = array();
$tagsTAr = explode(",", $tagsTStr);
}
else{
$tagsTAr = array();
$tagsTAr[0] = $tagsTStr;
}
//обнуляем счетчик повторений
$count=0;
//перебор всех тегов текущей страницы
foreach ($tagsAras $tag){
//перебир всех тегов для рассматриваемого набора тегов одной из статей
foreach ($tagsTAras $tagT){
//в случае если названия тегов сходятся
if (!strcmp($tagT,$tag)){
$count++;
//вписываем в массив $arr обновленное значение счетчика для ключа $id
$arr[$Id]=$count;
}
}
}
}
//сортируем  массив по значениям счетчиков
arsort($arr);
$i=0;
//производим составление строчки k, которая будет содержать список id схожих статей в порядке убывания значений их счетчиков
foreach ($arr as $key=>$v){
if ($key!==$myId){
$k.=$key;
$k.=',';
}
$i++;
}
//вырезаем заключительную запятую из строчки
$k=substr($k, 0, strlen($k)-1);
//назначаем строчку как параметр выводимых ресурсов
$options['resources'] = $k;
//назначаем строчку как параметра порядка вывода ресурсов
$options['sortby'] = 'FIELD(modResource.id, '.$k.' )';
//id родителя со знаком '-' для того чтобы демонстрировать лишь статьи отмеченные параметром resources
$options['parents'] = '-'.$myparentId;
//непременно включаем скрытые ресурсы (для статей Articles)
$options['showHidden'] = '1';
//шаблон вывода ресурсов
$options['tpl'] = $tpl;
//предельная численность выводимых ресурсов
$options['limit'] = '10';
//применяем отличную функцию runSnippe tдля запуска сниппета <a class="myClass" href="https://www.modx.cc/documentation/additions/getresources/">getResources</a> внутри нашего сниппета SimilarPosts
$result = $modx->runSnippet("<a class="myClass" href="https://www.modx.cc/documentation/additions/getresources/">getResources</a>",$options);
if ($result[0]==''){
return 'Не найдено';
}
//возвращаем результат
return $result;</code>


Далее необходимо только затребовать данный сниппет на страничке, определяя имя шаблона для элемента списка и наибольшую численность элементов (по умолчанию 10):

<code>[[!SimilarPost? &tpl=`example-post-tpl` &limit=`20`]]</code>


При данном вызов обязан быть не кэширующий. Таким образом правильнее поступать в основной массе сниппетов разработанных независимо.


В свою очередь можно задать параметры $myparentId (родитель из коего берется из статьи для сопоставления) и $myId (текущая страничка, на ней вызываем сниппет).


Нужно заметить, что в определенных ситуациях может появиться проблема с вызовом (а конкретно при попытке применять сниппет внутри шаблона для getResources):

<code>$myparentId = $modx->resource->get('parent');</code>


В следствии этого лучше назначать id родителя вручную, во время вызова сниппета.

Хостинг для MODX

Смотрите также:

Asset Manager MODX Revolution

Asset Manager MODX Revolution

Смотреть

Quickstart Buttons

Quickstart Buttons

Смотреть

Как обновить MODX Revolution

Как обновить MODX Revolution

Смотреть


Услуги по MODX Revolution

Посмотреть все услуги

Оптимизация сайта

Оптимизация сайта

Заказав услуги по технической оптимизации сайта мы избавим вас от ошибок присутствующих на сайте, а так же увеличим скорость работы вашего сайта.

Подробнее & Заказать

Создание сайта на MODX

Создание сайта на MODX

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

Подробнее & Заказать

Перенос сайта на MODX

Перенос сайта на MODX

Работа по переносу сайта на MODX осуществляется в максимально короткие сроки. Стоимость зависит от сложности переносимого сайта

Подробнее & Заказать

Продвижение сайта на MODX

Продвижение сайта на MODX

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

Подробнее & Заказать

Контактная информация

По всем интересующим вас вопросам связывайтесь при помощи контактной информации приведенной на этой странице!

telegram: @Accusser
skype: metsof
email: accusser@gmail.com

В социальных сетях...

Форма обратной связи

Sign In