Page 1 of 1

Категории новостей в результатах поиска

Posted: Thu Jan 22, 2015 4:21 pm
by Singularity
Еще одна тема, которая часто поднимается, но остается не раскрытой до конца.

Подскажите, если кто знает: При выдаче результатов поиска модулем Search новости (модуль News) открываются в той же странице, с какой производился поиск.
В хэлпе модуля дан пример, позволяющий определять модуль News при поиске, но мне не помогло: моя задача сложнее. Нужно новость открывать в такой detailpage, которая создана под КОНКРЕТНУЮ категорию новости.

Т.е. грубо говоря, логика вроде того:
{if $entry->module == 'News'}
$catname= имя категории
$news_id=ID статьи
<news id="$news_id" detailpage="$catname (я называю одинаково страницу и категорию)" summarytemplate="" >
{else}
<li><a href="{$entry->url}">{$entry->urltxt}</a></li>
{/if}


---
And in English:
Please, help me with this trouble.
When I get the Search module’s results, I have also the links that calls news’ articles (if article is relevant to search request).
By clicking this links I can open the news article, but it is being open in that page, I called the article from. But I need to open it in detail page, defined specially for its news category
So, I need something like this:
{if $entry->module == 'News'}
$catname= determination of news’ category, the main trouble
$news_id=ID of article
<news id="$news_id" detailpage="$catname (I named detail pages and categories equally)" summarytemplate="" >
{else}
<li><a href="{$entry->url}">{$entry->urltxt}</a></li>
{/if}

Re: Категории новостей в результатах поиска

Posted: Thu Jan 22, 2015 10:40 pm
by guro
Т.к. в модуле News нельзя привязать глобальный шаблон к категории новостей, то приходится идти на ухищрения. Для вашего случая могу предложить следующий вариант.
Структура url в модуле News следующая:

Code: Select all

/news/1/15/News-Module-Installed/
где, 
"news" - зарезервированное слово
"1" - id новости
"15" - id страницы контента, чей глобальный шаблон будет использован
"News-Module-Installed" - алиас(ссылка) новости. Формируется либо автоматически, либо указывается внутри новости.
Но, для того чтобы в выдаче поиска получить url такого вида, вам следует кое что изменить. Прочитайте вот эту тему. В ней написано что нужно сделать.
Сейчас нас интересует id страницы контента.
1. Создаем тег пользователя get_news_url со следующим содержимым

Code: Select all

$news_url = $params['url'];
$news_id = $params['news_id'];
$db = cmsms()->GetDb();
//Так как в модуле News нет функции позволяющей получить название категории, то используем прямой запрос к БД
$news_cat = $db->GetOne("SELECT ncat.`news_category_name` FROM `" .cms_db_prefix() . "module_news` as nws LEFT JOIN `" . cms_db_prefix() . "module_news_categories` as ncat USING(`news_category_id`) WHERE nws.`news_id` = ?", array($news_id));
$smarty = cmsms()->GetSmarty();
$manager = cmsms()->GetHierarchyManager();
$node =& $manager->sureGetNodeByAlias($news_cat);
$page_id = -1;
if ( isset($node) ) {
  $content =& $node->GetContent();
  if ($content !== FALSE && is_object($content)) {
    $page_id = $content->Id();
  } 
}
if ( $page_id != -1 ) {
  //Подменяем id страницы для раскрытия новости
  $news_url = preg_replace('|(/[nN]ews/\d*/)(\d*)(.*)|', '${1}' . $page_id . '$3', $news_url);
}
$smarty->assign($params['assign'], $news_url);
2. В шаблоне результата поиска в foreach записываем следующее

Code: Select all

{if $entry->module == 'News'}
  {get_news_url url=$entry->url news_id=$entry->modulerecord assign=news_url}
  <li>{$entry->title} - <a href="{$news_url}">{$entry->urltxt}</a> ({$entry->weight}%)</li>
{else}
  <li>{$entry->title} - <a href="{$entry->url}">{$entry->urltxt}</a> ({$entry->weight}%)</li>
{/if}

Re: Категории новостей в результатах поиска

Posted: Fri Jan 23, 2015 8:52 am
by Singularity
Большое спасибо за ответ.

Не смог только найти, где в модуле новостей менять представление адреса. Был комментарий, что "актуально для новых версий модуля". У меня установлен модуль 2.14.4, шел в сборке со всей ЦМС. При поиске самый свежий показывает 2.14.1

Re: Категории новостей в результатах поиска

Posted: Sat Jan 24, 2015 5:06 pm
by Singularity
Так сможете помочь с вопросом, где искать функцию модуля NEws для редактирования? У меня свежий модуль, но я там не нашел...

Re: Категории новостей в результатах поиска

Posted: Sat Jan 24, 2015 9:27 pm
by guro
Так всё-таки не выдает PrettyUrl в результатах поиска? ))
Постом выше вы в ПС-е писали что у вас всё работает, но теперь удалили. Ну да ладно. Функция SearchResultWithParams находится в главном файле модуля News.module.php (на ftp).

Re: Категории новостей в результатах поиска

Posted: Mon Jan 26, 2015 7:59 am
by Singularity
Я когда написал, что выдает правильный адрес - ошибся. Я настроил выдачу pretty url в адресной строке броузера и поспешил радоваться. Внимательно же перечитав Ваш ответ, понял, что Вы говорили про адрес в результате поиска. Поэтому стер, что глупость написал )

Спасибо за уточнение про Php!

Пока это не помогло, ковыряюсь )
Pretty URL выдается в поиске, но пока в нем для ссылки на новость по-прежнему используется ID страницы результата поиска, хотя тэг создавал и в результат поиска код замены ссылки вставил.

Re: Категории новостей в результатах поиска

Posted: Mon Jan 26, 2015 10:00 am
by guro
Singularity wrote:Pretty URL выдается в поиске, но пока в нем для ссылки на новость по-прежнему используется ID страницы результата поиска
У вас точно существуют страницы с алиасами идентичными категориям новостей? Если название категории отличается от алиаса страницы, то ссылка действительно останется без изменения. Проверьте регистр букв. Категория "Sport" не соответствует странице "sport"

Re: Категории новостей в результатах поиска

Posted: Mon Jan 26, 2015 11:16 am
by Singularity
Точно, не совпадали ) Спасибо Вам за это отличное решение! Работает!