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

Обсуждение CMS Made Simple в России.

Moderators: iturbay, wdwp

Post Reply
Singularity
Forum Members
Forum Members
Posts: 30
Joined: Thu May 22, 2014 7:17 am

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

Post 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}
User avatar
guro
Power Poster
Power Poster
Posts: 985
Joined: Thu Apr 26, 2012 8:38 pm
Location: Ramenskoe

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

Post 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}
Singularity
Forum Members
Forum Members
Posts: 30
Joined: Thu May 22, 2014 7:17 am

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

Post by Singularity »

Большое спасибо за ответ.

Не смог только найти, где в модуле новостей менять представление адреса. Был комментарий, что "актуально для новых версий модуля". У меня установлен модуль 2.14.4, шел в сборке со всей ЦМС. При поиске самый свежий показывает 2.14.1
Singularity
Forum Members
Forum Members
Posts: 30
Joined: Thu May 22, 2014 7:17 am

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

Post by Singularity »

Так сможете помочь с вопросом, где искать функцию модуля NEws для редактирования? У меня свежий модуль, но я там не нашел...
User avatar
guro
Power Poster
Power Poster
Posts: 985
Joined: Thu Apr 26, 2012 8:38 pm
Location: Ramenskoe

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

Post by guro »

Так всё-таки не выдает PrettyUrl в результатах поиска? ))
Постом выше вы в ПС-е писали что у вас всё работает, но теперь удалили. Ну да ладно. Функция SearchResultWithParams находится в главном файле модуля News.module.php (на ftp).
Singularity
Forum Members
Forum Members
Posts: 30
Joined: Thu May 22, 2014 7:17 am

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

Post by Singularity »

Я когда написал, что выдает правильный адрес - ошибся. Я настроил выдачу pretty url в адресной строке броузера и поспешил радоваться. Внимательно же перечитав Ваш ответ, понял, что Вы говорили про адрес в результате поиска. Поэтому стер, что глупость написал )

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

Пока это не помогло, ковыряюсь )
Pretty URL выдается в поиске, но пока в нем для ссылки на новость по-прежнему используется ID страницы результата поиска, хотя тэг создавал и в результат поиска код замены ссылки вставил.
User avatar
guro
Power Poster
Power Poster
Posts: 985
Joined: Thu Apr 26, 2012 8:38 pm
Location: Ramenskoe

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

Post by guro »

Singularity wrote:Pretty URL выдается в поиске, но пока в нем для ссылки на новость по-прежнему используется ID страницы результата поиска
У вас точно существуют страницы с алиасами идентичными категориям новостей? Если название категории отличается от алиаса страницы, то ссылка действительно останется без изменения. Проверьте регистр букв. Категория "Sport" не соответствует странице "sport"
Singularity
Forum Members
Forum Members
Posts: 30
Joined: Thu May 22, 2014 7:17 am

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

Post by Singularity »

Точно, не совпадали ) Спасибо Вам за это отличное решение! Работает!
Post Reply

Return to “Russian - русский”