Тематика: По цвету: Красный Желтый Зеленый Синий Оранжевый Розовый Серый Белый Черный Мульти

Ваш сайт на CMS Joomla? Добавьте его в галерею Joomfans!

Вы можете совершенно бесплатно добавить ваш веб-сайт в нашу галерею сайтов. Подробнее...

Галерея Добавить

Главная Статьи Блог Фильтрация и разбор контента Joomla по тексту статьи
Фильтрация и разбор контента Joomla по тексту статьи

filter by_content_joomfans

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

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

 

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

filtr1 joomfans

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

 

Для кого написана данная статья? для тех у кого есть сайт с большим количеством новостей и все они расположены в 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='';

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

2011-12-03 093219

 

Далее вам необходимо открыть файл /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=Фильтр по контенту

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

 

2011-12-03 092443

 

Если открыть любой материал который был выдан при поиске (фильтрации), то в нем можно найти и наше слово «Мультфильм»

 

2011-12-03 092841

 

Как это может пригодиться? Очень просто. К примеру у вас есть 1 категория в которой расположены десятки тысяч материалов и вы бы хотели их разграничить по категориям, для примера вы создаете категорию «Документальное кино», далее вбиваете в поле поиска слово «Документальный» или ТВ (все зависит от того что прописано у вас в контенте и в каких массовых количествах имеются такие ключевые слова). После поиска отмечаете массово материалы и перемещаете их в необходимую категорию (в нашем примере категория «Документальное кино»)

2011-12-03 095718

 

Для меня до сих пор остается загадкой и нет ответа на вопрос - Почему разработчики одной из самых лучшей и известной бесплатной CMS в мире не добавили данный функционал поиска ни в одну из своих версий CMS Joomla?

На сегодняшний день существует масса компонентов с помощью которых можно осуществлять поиск через административный интерфейс, вот несколько из них: RSSearch, AceSearch и JXtended. Но ни один из существующих компонентов или модулей не позволит вам массово перенести\скопировать материалы из одной категории\раздела в другой, они лишь позволяют осуществлять простой поиск.

Решение описанное выше на сегодняшний день, является единственным и самым простым способом найти и разграничить ваш контент в CMS Joomla, буквально за несколько минут (в зависимости от количества материалов).

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

 

Решение фильтрации текста написано для CMS Joomla 1.5.25. В более ранних версиях может быть отличие лишь в нумерации строк при модифицировании файлов.

Вы также можете скачать уже готовые измененные файлы для CMS Joomla 1.5.25 с нашего сервера - скачать фильтрацию поиска по материалам.

 

Посмотреть инструкцию по созданию полей фильтрации для CMS Joomla 2.5

Автор: Joomfans.com
Копирование информации без размещения активной и индексируемой ссылки - запрещено!.

Партнеры

 

Комментарии

0Дмитрий06.02.2012 22:19#1
Прекрасная статья. А можно то же самое для Joomla 1.7?
0joomfans07.02.2012 09:04#2
Цитирую Дмитрий:
Прекрасная статья. А можно то же самое для Joomla 1.7?

Да, конечно можно. Напишу мануал, но наверное будет целесообразнее это делать уже для J!2.5.
Кстати, опять же в J2.5 был реализован встроенный расширенный поиск контента, и опять же он ищет только по заголовкам...
0Дмитрий07.02.2012 09:39#3
Цитирую joomfans:
Цитирую Дмитрий:
Прекрасная статья. А можно то же самое для Joomla 1.7?

Да, конечно можно. Напишу мануал, но наверное будет целесообразнее это делать уже для J!2.5.
Кстати, опять же в J2.5 был реализован встроенный расширенный поиск контента, и опять же он ищет только по заголовкам...

Спасибо. Можно также еще сделать, добавлять материал в несколько категорий?
0joomfans07.02.2012 09:58#4
Цитирую Дмитрий:
Спасибо. Можно также еще сделать, добавлять материал в несколько категорий?

А что это вам даст? Этим самым вы только ухудшите ваш сайт в глазах ПС.
Если уж очень сильно нужно "добавить" один и тот же материал в несколько категорий Joomla, вы можете также выделить несколько материалов, и нажать в правом верхнем углу на кнопку «Копировать», после выбрать ту категорию в которую нужно добавить эти материалы, и нажать на кнопку «Сохранить», таким образом вы получите один и тот же материал (статью) в разных категориях.
Настоятельно, не рекомендую делать таких манипуляций! Этим самым вы получите массу дубликатов одних и тех же страниц, что несомненно очень плохо скажется на поисковой оптимизации сайта, в следствии чего ПС может склеить страницы вашего сайта или же просто забанить сайт в выдаче.
0Дмитрий07.02.2012 10:13#5
ситуация такая: есть 1500 уч заведений, нужно их фильтровать по городу, стране, языку изучения.Это просто материалы, поделенные по категориям стран. Нужно вот еще придумать, как их фильтровать по другим критериям
0joomfans07.02.2012 13:52#6
Поставьте любой компонент тегов или разграничения по группам, и получите необходимый результат. Но не в коем случае не дублируйте контент по разным категориям.
0Дмитрий07.02.2012 15:29#7
Цитирую joomfans:
Поставьте любой компонент тегов или разграничения по группам, и получите необходимый результат. Но не в коем случае не дублируйте контент по разным категориям.

Спасибо. P.S. Жду эту статью под Joomla 2.5
0joomfans08.02.2012 19:39#8
Цитирую Дмитрий:
Спасибо. P.S. Жду эту статью под Joomla 2.5

Пользуйтесь! http://joomfans.com/blogs/filtratsiya-i-razbor-kontenta-po-tekstu-stati-v-cms-joomla-25.html

Литература

8 видеоуроков по…

На днях популярная и известная студия по разработке шаблонов и…

Joomla!…

Если вы часто создаете сайты на CMS Joomla! 1.6, 1.7 или 2.5 то вы…

10 легких шагов к…

Прочитав книгу Хагена Графа «10 легких шагов к освоению Joomla! 3.0»…

Joomla! 2.5 -…

Книга «Joomla! 2.5 - Руководство для начинающего пользователя»…

Инструменты

Akeeba SiteDiff

При создании сайта, всегда есть вероятность того что он будет взломан…

Morph Framework

Последняя обновленная и уже совершенно бесплатная версия фреймворка…

CodeLobster PHP…

Очень мощный и многофункциональный редактор РНР, HTML, CSS,…

JB Zen Grid Framework…

Последняя обновленная версия фреймворка Zen Grid от студии…