Модуль TopExtraVote - модуль рейтинга статей

Модуль TopExtraVote, 4.5 из 5 основанный на 37 голосах.

Модуль TopExtraVote для Joomla позволяет отображать самые популярные статьи, участвующие в рейтинге. Модуль использует данные, основанные на результатах голосования плагина ExtraVote.



Возможности модуля TopExtraVote

Модуль позволяет:

  • Использовать алиас заголовка вместо самого заголовка статьи;
  • Указать максимальное Количество статей рейтинга;
  • Отображать рейтинг выбранных категорий по ID категорий, разделенных запятыми;
  • Назначить значение строки голосов - Строка голосов;
  • Поддерживать Положение количества голосов;
  • Показывать звезды под ссылкой и количеством голосов;
  • Сортировать список по звездам или голосам;
  • Учитывать Источник данных для рейтинга - таблица '#__content_rating', '#__content_extravote' или общий рейтинг двух таблиц;
  • Учесть язык - если включено, то язык статей должен соответствовать языку сайта или быть общим, чтобы попасть в рейтинг.

Где взять TopExtraVote для Joomla

Скачать модуль TopExtraVote можно с сайта автора по адресу: http://www.ecolora.com/index.php/programmy/file/14-module-top-extravote#russian

В архиве на странице загрузки имеются версии модуля для Joomla 1.5, Joomla 2.5 и Joomla 3.0. Распакуйте архив и выберите из него соответствующий вашей версии Joomla.


Установка TopExtraVote для Joomla

Зайдите в административную панель управления CMS и выберите в меню «Расширения» пункт «Менеджер расширений». В форме выберите скачанный файл модуля и нажмите кнопку «Загрузить и установить». Модуль будет установлен в систему.

Выбор файла модуля TopExtraVote Выбор файла модуля TopExtraVote Установка модуля TopExtraVote Установка модуля TopExtraVote

Настройка TopExtraVote для Joomla

Выберите в меню «Расширения» пункт «Менеджер модулей». Далее в списке находим установленный модуль и, кликнув по ссылке, входим в режим редактирования его параметров. Если есть необходимость создать еще один или несколько модулей - нажмите кнопку «Создать» и выберите тип модуля «TopExtraVote».

Менеджер модулей Joomla Менеджер модулей Joomla Выбор модуля TopExtraVote Выбор модуля TopExtraVote

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

Отдельного пояснения требует «Источник». Таблица '#__content_rating' – главный счетчик на статью, а '#__content_extravote' - счетчики на отдельные ее части. Установите в качестве источника «Рейтинг» или «Общий».

Результат работы модуля вы видите на следующей картинке.

Конфигурация модуля TopExtraVote Конфигурация модуля TopExtraVote Изображение модуля TopExtraVote Изображение модуля TopExtraVote

Доработка TopExtraVote для Joomla

Замеченные недостатки

  • «Использовать алиас» заголовка, на мой взгляд, совершенно не нужная опция.
  • Вместо звезд цифры.
  • Нет возможности выбрать родительскую категорию и учитывать рейтинг статей в ее дочерних категориях. Приходится перечислять все дочерние категории через запятую.
Удаляем «Использовать алиас»

Из файлов языков, languages/ru-RU.mod_top_extravote.ini для русского языка и прочих, убираем упоминания

MOD_TOP_EXTRAVOTE_USE_TITLEALIAS="Использовать алиас"
MOD_TOP_EXTRAVOTE_USE_TITLEALIAS_DESC="Использовать алиас заголовка вместо самого заголовка статьи"

Из файла mod_top_extravote.xml убираем строки

<field name="usetitlealias" type="radio" default="0" label="MOD_TOP_EXTRAVOTE_USE_TITLEALIAS" description="MOD_TOP_EXTRAVOTE_USE_TITLEALIAS_DESC">
	<option value="1">MOD_TOP_EXTRAVOTE_YES</option>
	<option value="0">MOD_TOP_EXTRAVOTE_NO</option>
</field>

В фале helper.php комментируем строки

//if ($usetitlealias) {
//	$lists[$i]->text = htmlspecialchars( $act[0]->title_alias );
//} else {
	$lists[$i]->text = htmlspecialchars( $act[0]->title );
//}
Куда подевались Звезды, или откуда взялись 11111?

В ExtraVote 1.6 для вывода Звезд используются селекторы

  • ul.extravote-stars,
    ul.extravote-stars li a:hover,
    ul.extravote-stars li.current-rating,
    ul.extravote-stars-small,
    ul.extravote-stars-small li a:hover,
    ul.extravote-stars-small li.current-rating {
        background-image: url('/../images/star.png')!important;
        background-color: transparent!important;
        background-repeat: repeat-x!important;
    }
    

    В более древних версиях использовались другие селекторы

    .extravote-stars,
    .extravote-star a:hover,
    .extravote-stars .current-rating {
        background-image: url('/../images/star.png')!important;
        background-color: transparent!important;
        background-repeat: repeat-x!important;
    }
    

    Что-то пошло не так - или в реализации модуля, или в плагине. Более старого плагина у меня нет, поэтому я решил ввести в конфигурацию модуля возможность выбора взамен автомата.

    В файл mod_top_extravote.xml добавляем необходимую опцию выбора типа селектора

    <field name="selector_stars" type="radio" default="1" label="MOD_TOP_EXTRAVOTE_SELECTOR_STARS" description="MOD_TOP_EXTRAVOTE_SELECTOR_STARS_DESC">
    	<option value="0">MOD_TOP_EXTRAVOTE_NO</option>
    	<option value="1">MOD_TOP_EXTRAVOTE_YES</option>
    </field>
    

    В файлы языков, languages/ru-RU.mod_top_extravote.ini для русского языка и прочих, добавляем

    MOD_TOP_EXTRAVOTE_SELECTOR_STARS="Тип селектора список"
    MOD_TOP_EXTRAVOTE_SELECTOR_STARS_DESC="Если включено, используется тип селектора список, нет для более ранних версий плагина ExtraVote"
    

    И наконец в файле представления tmpl/default.php находим последнее вхождение

    if (modTopExtravoteHelper::ext_isJoomla('1.6', '>='))  {
    

    и заменяем на строку

    if (!$params->get('selector_stars')) {
    

    После установки опции «Тип селектора список» в «Да» у меня появились звезды.

    Вид модуля TopExtraVote Вид модуля TopExtraVote
    Выбор рейтинга материалов, включая дочерние категории

    В файл mod_top_extravote.xml добавляем необходимую опцию выбора включения дочерних категорий

    <field name="show_ show_daughter" type="radio" default="0" label="MOD_TOP_EXTRAVOTE_INCLUDE_DAUGHTER" description="MOD_TOP_EXTRAVOTE_INCLUDE_DAUGHTER_DESC">
    	<option value="0">MOD_TOP_EXTRAVOTE_NO</option>
    	<option value="1">MOD_TOP_EXTRAVOTE_YES</option>
    </field>
    

    В файлы языков, languages/ru-RU.mod_top_extravote.ini для русского языка и прочих, добавляем

    MOD_TOP_EXTRAVOTE_INCLUDE_DAUGHTER="Включая дочерние"
    MOD_TOP_EXTRAVOTE_INCLUDE_DAUGHTER_DESC="Включая дочерние категории"
    

    Теперь самое сложное. В файле helper.php внутрь класса modTopExtravoteHelper добавляем две функции – члены класса:

            function listChilds(&$db, &$id)
            {
                    $i = 0;
                    $list = implode(',', $id);
                    $param = $list;
                    do {
                            $rows = modTopExtravoteHelper::getChilds($db, $param);
                            $param = implode(',', $rows);
                            if ($param != "") $list .= ",".$param;
                    } while (count($rows) && $i++ < 10);
                    return $list;
            }
    
            function getChilds(&$db, &$id)
            {
                    $list = array();
                    $query = "SELECT tbCat.id FROM #__categories AS tbCat WHERE (tbCat.parent_id IN($id) AND tbCat.published=1)";
                    $db->setQuery($query);
                    $db->query();
                    $rows = $db->loadObjectList();
                    for ($i = 0; $i < count($rows); $i++) {array_push($list, &$rows[$i]->id);}
                    return $list;
            }
    

    Эти функции будут возвращать список всех категорий, включая дочерние. Остается лишь вызвать их. В функции getList(&$params) добавим строчку чтения опции «Включая дочерние»

    $daughter = $params->get('show_daughter',0);
    

    Затем найдите фрагмент

                    if ((!modTopExtravoteHelper::ext_isJoomla('1.6', '>=')) && ($secid)) {
                            $ids = explode(',', $secid);
                            JArrayHelper::toInteger($ids);
                            $where .= ' AND (ar.sectionid='.implode(' OR ar.sectionid=', $ids).')';
                    }
    

    И после него добавьте следующий код

                    if (modTopExtravoteHelper::ext_isJoomla('1.6', '>=') && $catid && $daughter) {
                            $ids = array_unique(explode(',', modTopExtravoteHelper::listChilds($db, $ids)));
                            JArrayHelper::toInteger($ids);
                            $where = ' AND (ar.catid='.implode(' OR ar.catid=', $ids).')';
                    }
    

    Скачать модуль TopExtraVote ext для Joomla

    TopExtraVote ext для Joomla 2.5 с моими доработками.


    Если эта статья показалась вам полезной, пожалуйста, проголосуйте за нее. Это поможет другим быстрее найти эту статью из множества других менее полезных.
    ( 37 Голосов ) 

Комментарии   

 
# Иван 05.03.2013 23:20
Не показывает больше одного материала.
Ответить | Ответить с цитатой | Цитировать
 
 
# Ковенко В.Б. 07.03.2013 20:36
Значит в выбранной категории только одна статья имеет голос.
В противном случае, количество статей в настройках модуля имеет значение 1.
Ответить | Ответить с цитатой | Цитировать
 
 
# Vasia 09.04.2013 20:19
Спасибо! Потестю на своем сайте!
Ответить | Ответить с цитатой | Цитировать
 
 
# Стас 06.08.2013 03:28
Нашел скрытую ссылку в base64_decode на кулинарный сайт _ecolora.me (видимо автора) ..как её правильно убрать? подскажите пожалуйста..

public_html/modules/mod_top_extravote/tmpl/default.php ..строка 87 - $spans .= "
Ответить | Ответить с цитатой | Цитировать
 
 
# Ковенко В.Б. 06.08.2013 09:18
У меня другая версия, $spans нет. Но нужно довести до вида остальных строк. убрать
((условие) ? если_истина : если_ложь)
Вместо этой конструкции должен остаться кусок если_ложь
Ответить | Ответить с цитатой | Цитировать
 

Добавить комментарий

Уважаемые посетители!
Комментарии модерируются, активные ссылки на сайты не публикуются. Пожалуйста, не тратьте понапрасну свое и мое время на попытку размещения спамерских ссылок.
Спасибо.


Защитный код
Обновить