Фильтрация и разбор контента Joomla по тексту статьи

поиск файлов

В сферу моей деятельности мне очень часто приходится работать с тонной контента, который нужно разграничивать часами и сутками по категориям и разделам в CMS Joomla. Делать это вручную практически нереально в особенности если на сайте более 10000-20000 новостей.

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

Разработчики CMS Joomla по умолчанию в административной панели, сделали функцию фильтрации контента по заголовкам:

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

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

Для создания данного функционала по поиску и фильтрации контента непосредственно по самому тексту, вам будет необходимо модифицировать 3 файла:

/administrator/components/com_content/controller.php
/administrator/components/com_content/admin.content.html.php
/administrator/language/ru-RU/ru-RU.ini

Итак для начала нам необходимо создать новое поле ввода фильтрации контента по тексту статьи, для этого вам необходимо открыть файл: /administrator/components/com_content/admin.content.html.php

Найдите в этом файле 54 строчку, в ней вы увидите код кнопки поиска:
<button onclick="this.form.submit();"><?php echo JText::_( 'Go' ); ?></button>

Вам необходимо перед этой строчкой вставить код поля поиска по контенту:
<?php echo JText::_( 'Filter by Content' );?>:
<input type="text" name="search_content" id="search_content" value="<?php echo $lists['search_content'];?>" class="text_area" onchange="document.adminForm.submit();" title="<?php echo JText::_( 'Filter by content' );?>"/>

Далее вам необходимо добавить событие OnClick на кнопку сброса, которая будет сбрасывать текст и данные фильтрации в окне поиска текста по контенту (после поиска). Для этого в этом же файле уже в 58 строчке в кнопке «Reset» добавьте после кода:
document.getElementById('search').value='';

следующий код
document.getElementById('search_content').value='';

Теперь кнопка сброса у вас будет работать отменно и само поле ввода текста создано.

Далее вам необходимо открыть файл /administrator/components/com_content/controller.php и добавить код обработки, который фактически и будет выполнять поиск по тексту контента.

Перейдите к строчке 44 (функция viewContent) и найдите в ней переменную $search (53 строка):
$search = $mainframe->getUserStateFromRequest( $context.'search', 'search', '', 'string' );

Вставьте после этой строчки, код приведенный ниже:
$search_content = $mainframe->getUserStateFromRequest('articleelement.search_content', 'search_content', '', 'string');
$search_content = JString::strtolower($search_content);

Теперь нам необходимо изменить запрос к базе данных. Перейдите в этом же файле к 130 строчке и перед:
// Keyword filter
if ($search) {
$where[] = '(LOWER( c.title ) LIKE '.$db->Quote( '%'.$db->getEscaped( $search, true ).'%', false ) .
' OR c.id = ' . (int) $search . ')';
}

вставьте следующий код:
// Content text filter
if ($search_content) {
$where[] = 'LOWER( c.introtext ) LIKE '.$db->Quote( '%'.$db->getEscaped(
$search_content, true ).'%', false ).
' OR LOWER( c.fulltext ) LIKE '.$db->Quote( '%'.$db->getEscaped( $search_content, true ).'%', false );
}

После всех этих действий поиск по тексту контента уже будет работать, но при вводе текста в поле фильтрации после поиска оно будет автоматически сбрасываться. Для того чтобы решить эту проблему найдите в этом же файле код в строке 214:
$lists['search'] = $search;

добавьте после него следующий код для обработки:
$lists['search_content'] = $search_content;

После этого если вы любите русский язык, откройте файл /administrator/language/ru-RU/ru-RU.ini

и добавьте в самом конце этого файла, строчку:
FILTER BY CONTENT=Фильтр по контенту

Теперь проверяем работоспособность нашего поиска текста по контенту, вводим любое слово которое может содержать контент, в нашем случае «Мультфильмы»


Источник: http://joomfans.com

Добавить комментарий:
Имя:
E-mail:
2021 © Обсуждение Joomla и других CMS-систем управления сайтами  Правила | О проекте | Обратная связь