Cортировка статей по голосам с помошью плагина extravote

Тема в разделе "Программирование", создана пользователем vectorserver22, 13.11.2009.

  1. Offline

    vectorserver22 Недавно здесь

    Регистрация:
    12.04.2009
    Сообщения:
    73
    Симпатии:
    2
    Пол:
    Мужской
    Добрый вечер, такая проблема как реализовать сортировку статей не по хитам, а по голосованиям за статью с помощью плагина extravote, помогите пожалуйста ичень нужно, заранее большое спасибо!!
     

    Вложения:

    • qww.jpg
      qww.jpg
      Размер файла:
      85.4 КБ
      Просмотров:
      29
    • plg_extravote.zip
      Размер файла:
      14.2 КБ
      Просмотров:
      4
  2.  
  3. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    зачем Вам плагин ??? В компоненте найдите запрос, который выбирает статьи и измените сортировку на ORDER BY "поле_с_голосами" DESC
     
  4. Offline

    vectorserver22 Недавно здесь

    Регистрация:
    12.04.2009
    Сообщения:
    73
    Симпатии:
    2
    Пол:
    Мужской
    Уважаемый omfgpanda неподскажите какой фаил ковырять нашел 2 файла в com_content

    controller.php
    Код (PHP):
    1. Line 79:            $order = ' ORDER BY section_name, cc.title, c.ordering '. $filter_order_Dir;
    2.     Line 81:            $order = ' ORDER BY '. $filter_order .' '. $filter_order_Dir .', section_name, cc.title, c.ordering';
    3.     Line 168:               ' ORDER BY s.ordering, cc.ordering';
    4.     Line 183:               ' ORDER BY u.name';
    5.     Line 265:       $orderby = ' ORDER BY '. $filter_order .' '. $filter_order_Dir .', sectname, cc.name, c.ordering';
    6.     Line 302:               ' ORDER BY c.ordering';
    7.     Line 319:               ' ORDER BY u.name';
    8.     Line 459:               ' ORDER BY s.ordering';
    9.     Line 490:               ' ORDER BY ordering';
    10.     Line 529:               ' ORDER BY ordering';
    11.     Line 1006:  * @param integer The increment to reorder by
    12.     Line 1060:              ' ORDER BY a.title';
    13.     Line 1068:              ' ORDER BY s.title, c.title';
    14.     Line 1191:              ' ORDER BY a.title';
    15.     Line 1200:              ' ORDER BY s.title, c.title';

    и
    element.php
    Код (PHP):
    1. Line 76:        $order = ' ORDER BY '. $filter_order .' '. $filter_order_Dir .', section_name, cc.name, c.ordering';
     
  5. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    это у вас список содержимого категории ? или что ? какой тип меню ? там в настройках меню должен быть выбор сортировки. В принципе переписывать ничего не нужно.
     
  6. Offline

    vectorserver22 Недавно здесь

    Регистрация:
    12.04.2009
    Сообщения:
    73
    Симпатии:
    2
    Пол:
    Мужской
    Нет нуту у меня такого только по хитам, а хиты определяются по по прсмоттру статьи :(
    Вот скрин:)
    omfgpanda на тебя одна надежда :)
     
    Последнее редактирование модератором: 25.03.2014
  7. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    вы не ответили на вопрос - какой тип меню ?
     
  8. Offline

    vectorserver22 Недавно здесь

    Регистрация:
    12.04.2009
    Сообщения:
    73
    Симпатии:
    2
    Пол:
    Мужской
    Тип пункта меню

    Шаблон блога категории
     
  9. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    хорошо.... я завтра с утра поковыряю, а то сейчас спать охота )
     
  10. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    а с помощью чего вы осуществляете голосование ? в стандартном com_content этого нет.
     
  11. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    а, все... экставоте )))) с утра что то еще не до конца проснулся )
     
  12. Offline

    vectorserver22 Недавно здесь

    Регистрация:
    12.04.2009
    Сообщения:
    73
    Симпатии:
    2
    Пол:
    Мужской
    Ну там ещё есть родной плагин Content - Rating
    И еще вот модуль нашел который както определяет голоса
     

    Вложения:

  13. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    ну в общем я нашел решение для plg_extravote ... ближе к вечеру озвучу )
     
  14. Offline

    vectorserver22 Недавно здесь

    Регистрация:
    12.04.2009
    Сообщения:
    73
    Симпатии:
    2
    Пол:
    Мужской
    Ок жду )
     
  15. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    И так ....данная модификация работает только для плагина extravote и только для типа меню "Блог категории".
    1. Топаем в файл components/com_content/views/category/tmpl/blog.xml. Ищем там блок(строка 37):
    Код (CODE):
    1. <param name="orderby_sec" type="list" default="" label="Primary Order"
    2.                     description="Order   that the items will be displayed in.">
    3.         <option value="">Default</option>
    4.     <option value="date">Oldest first</option>
    5.     <option value="rdate">Most recent first</option>
    6.     <option value="alpha">Title Alphabetical</option>
    7.     <option value="ralpha">Title Reverse-Alphabetical</option>
    8.     <option value="author">Author Alphabetical</option>
    9.     <option value="rauthor">Author Reverse-Alphabetical</option>
    10.     <option value="hits">Most Hits</option>
    11.     <option value="rhits">Least Hits</option>
    12.     <option value="order">Ordering</option>
    13. </param>

    и добавляем туда еще один параметр
    Код (CODE):
    1. <option value="votes">По голосам</option>

    Теперь, при редактировании/создании пункта меню типа "Блог категории" в дополнительных параметрах, в выпадающем списке "Основной порядок" вы можете наблюдать новый итем.

    Что бы все это работало топаем в components/com_content/helpers/query.php. Ищем там функцию orderbySecondary (строка 52) и в теле функции в оператор switch добавляем еще один флаг:
    Код (PHP):
    1. case 'votes' :
    2.    $orderby = 'xx.rating_sum DESC';
    3. break;

    получим:
    Код (PHP):
    1. function orderbySecondary($orderby)
    2.     {
    3.         switch ($orderby)
    4.         {
    5.             case 'date' :
    6.                 $orderby = 'a.created';
    7.                 break;
    8.  
    9.             case 'rdate' :
    10.                 $orderby = 'a.created DESC';
    11.                 break;
    12.  
    13.             case 'alpha' :
    14.                 $orderby = 'a.title';
    15.                 break;
    16.  
    17.             case 'ralpha' :
    18.                 $orderby = 'a.title DESC';
    19.                 break;
    20.  
    21.             case 'hits' :
    22.                 $orderby = 'a.hits DESC';
    23.                 break;
    24.  
    25.             case 'rhits' :
    26.                 $orderby = 'a.hits';
    27.                 break;
    28.  
    29.             case 'order' :
    30.                 $orderby = 'a.ordering';
    31.                 break;
    32.  
    33.             case 'author' :
    34.                 $orderby = 'a.created_by_alias, u.name';
    35.                 break;
    36.  
    37.             case 'rauthor' :
    38.                 $orderby = 'a.created_by_alias DESC, u.name DESC';
    39.                 break;
    40.  
    41.             case 'front' :
    42.                 $orderby = 'f.ordering';
    43.                 break;
    44.  
    45.             case 'votes' :
    46.                 $orderby = 'xx.rating_sum DESC';
    47.                 break;
    48.  
    49.             default :
    50.                 $orderby = 'a.ordering';
    51.                 break;
    52.         }
    53.  
    54.         return $orderby;
    55.     }

    Т.о. мы добавим сортировку для запроса. Но это еще не все.
    Топаем в components/com_content/models/category.php . Там нас интересует несколько функций:
    --- _buildQuery (строка 348. Эта функция возвращает конечный запрос, который выводит статьи в блоге.)
    В этой функции нас интересует только переменная $query, которую нужно заменить на:
    Код (PHP):
    1. $query = 'SELECT cc.title AS category, xx.rating_sum, a.id, a.title, a.alias, a.title_alias, a.introtext, a.fulltext,
    2. a.sectionid, a.state, a.catid, a.created, a.created_by, a.created_by_alias, a.modified, a.modified_by,' .
    3. ' a.checked_out, a.checked_out_time, a.publish_up, a.publish_down, a.attribs, a.hits,
    4. a.images, a.urls, a.ordering, a.metakey, a.metadesc, a.access,' .
    5. ' CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS(":", a.id, a.alias) ELSE a.id END as slug,'.
    6. ' CASE WHEN CHAR_LENGTH(cc.alias) THEN CONCAT_WS(":", cc.id, cc.alias) ELSE cc.id END as catslug,'.
    7. ' CHAR_LENGTH( a.`fulltext` ) AS readmore, u.name AS author, u.usertype, g.name AS groups,
    8. u.email as author_email'.$voting['select'] .
    9. ' FROM #__content AS a' .
    10. ' LEFT JOIN jos_content_rating AS xx ON a.id = xx.content_id' .
    11. ' LEFT JOIN #__categories AS cc ON a.catid = cc.id' .
    12. ' LEFT JOIN #__users AS u ON u.id = a.created_by' .
    13. ' LEFT JOIN #__groups AS g ON a.access = g.id'.
    14. $voting['join'].
    15. $where.
    16. $orderby;

    Здесь мы добавляем дополнительное поле, "xx.rating_sum", нужное нам для сортировки.
    Если не понятно что такое хх - то это псевдоним таблицы плагина extravote, поля которой мы приклеиваем к результату с помощью:
    Код (CODE):
    1. LEFT JOIN jos_content_rating AS xx ON a.id = xx.content_id


    Так же необходимо модифицировать функцию _buildContentOrderBy(строка 379). Привожу код новой функции, думаю так будет лучше, чем писать отрывками:
    Код (PHP):
    1. function _buildContentOrderBy($state = 1)
    2.     {
    3.         global $mainframe;
    4.         // Get the page/component configuration
    5.         $params = &$mainframe->getParams();
    6.         $itemid = JRequest::getInt('id', 0) . ':' . JRequest::getInt('Itemid', 0);
    7.         $filter_order  = $mainframe->getUserStateFromRequest('com_content.category.list.' . $itemid .
    8.                                                            '.filter_order', 'filter_order', '', 'cmd');
    9.         $filter_order_Dir = $mainframe->getUserStateFromRequest('com_content.category.list.' . $itemid .
    10.                                                            '.filter_order_Dir', 'filter_order_Dir', '', 'cmd');
    11.         $orderby = ' ORDER BY ';
    12.         if ($filter_order && $filter_order_Dir)
    13.         {
    14.             $orderby_ord = $filter_order .' '. $filter_order_Dir.', ';
    15.         }
    16.         elseif($filter_order == '' && $filter_order_Dir == '')
    17.         {
    18.                 $filter_order='a.ordering';
    19.                 $filter_order_Dir='ASC';
    20.                 $orderby_ord = $filter_order .' '. $filter_order_Dir.', ';
    21.         }
    22.  
    23.         if ($filter_order == 'author')
    24.         {
    25.             $orderby_ord = 'created_by_alias '. $filter_order_Dir.', ';
    26.         }
    27.         switch ($state)
    28.         {
    29.             case -1:
    30.                 // Special ordering for archive articles
    31.                 $orderby_sec    = $params->def('orderby', 'rdate');
    32.                 $secondary      = ContentHelperQuery::orderbySecondary($orderby_sec);
    33.                 $primary        = '';
    34.                 break;
    35.  
    36.             case 1:
    37.             default:
    38.                 $orderby_sec    = $params->def('orderby_sec', 'rdate');
    39.                 $orderby_sec    = ($orderby_sec == 'front') ? '' : $orderby_sec;
    40.                 $orderby_pri    = $params->def('orderby_pri', '');
    41.                 $secondary      = ContentHelperQuery::orderbySecondary($orderby_sec);
    42.                 $primary        = ContentHelperQuery::orderbyPrimary($orderby_pri);
    43.                 break;
    44.         }
    45.         $orderby .= $primary .' '. $secondary .', '. $orderby_ord .' a.created DESC';
    46.  
    47.         return $orderby;
    48.     }

    Суть данной модификации заключается в том, что бы поменять порядок сортировки. Изначально результат сортировался по полю "jos_content.ordering", а затем все остальное. Теперь сортируется по "jos_content_rating.rating_sum", затем по "jos_content.ordering" и все остальное )))

    Вот впринципе и все. B)
     
  16. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    блин.... добавьте горизонтальный скролл во вставки с кодом )
     
  17. Offline

    vectorserver22 Недавно здесь

    Регистрация:
    12.04.2009
    Сообщения:
    73
    Симпатии:
    2
    Пол:
    Мужской
    omfgpanda ващеЕЕЕЕЕЕЕЕЕЕ!!! Отдуши спасибо БОЛЬШОЕ, Респект слов нету!!!!!!!!!!
    Но у меня какято ишибка кажет все время
    XML Parsing Error at 48:29. Error 9: Invalid character
     
  18. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    проблемы в ХМЛ файле blog.xml ... что то ты там поменял не то ))) там просто нужно добавить дополнительное поле и все. Также проверьте - в какой кодировке вы его сохраняете. Я сохранял в УТФ-8, вроде все норм. Также попробуйте открыть Ваш ХМЛ-файл в браузере yourdomen.ru/components/com_content/views/category/tmpl/blog.xml . Там точно укажет на ошибку.
     
  19. Offline

    vectorserver22 Недавно здесь

    Регистрация:
    12.04.2009
    Сообщения:
    73
    Симпатии:
    2
    Пол:
    Мужской
    Угумс, дело было в кодировке, :)
    Еще РаЗ ОгРОмНоЕ СПАСИбО!!!!!!!!!!!!!!
     
  20. Offline

    Saint_Glory Недавно здесь

    Регистрация:
    16.01.2010
    Сообщения:
    5
    Симпатии:
    0
    Пол:
    Мужской
    Всем привет! Тоже заморочился с этим плагином. Так как я не програмист, то не могу понять где ошибка. Рейтинг добавил в каждую статью вида
    {extravote 1}
    {extravote 2}
    {extravote 3}
    {mainvote}

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

    Warning: Invalid argument supplied for foreach() in Z:\home\localhost\www\hostrank\components\com_content\models\category.php on line 337

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in Z:\home\localhost\www\hostrank\libraries\joomla\database\database\mysql.php on line 344
    
    Помогите разобраться.
     
  21. omfgpanda
    Offline

    omfgpanda специалист

    Регистрация:
    22.01.2008
    Сообщения:
    673
    Симпатии:
    53
    Пол:
    Мужской
    хачем же спамить в разных темах :butcher:
     

Поделиться этой страницей

Загрузка...