Joomla 2.5 Модуль вывода категорий K2. Не выводить те категории, в которых нет статей.

Тема в разделе "Модернизация расширений", создана пользователем Orlando, 02.10.2014.

  1. Orlando
    Offline

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

    Регистрация:
    02.10.2014
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    Всем привет, у меня есть модуль (по сути переработанный k2tools, в частности его часть отвечающая за вывод search box), вот код вывода модуля:

    Код (PHP):
    1. <?php
    2. /**
    3. * @version        $Id: search.php 1492 2012-02-22 17:40:09Z joomlaworks@gmail.com $
    4. * @package        K2
    5. * @author        JoomlaWorks http://www.joomlaworks.net
    6. * @copyright    Copyright (c) 2006 - 2012 JoomlaWorks Ltd. All rights reserved.
    7. * @license        GNU/GPL license: http://www.gnu.org/copyleft/gpl.html
    8. */
    9.  
    10. // no direct access
    11. defined('_JEXEC') or die('Restricted access');
    12.  
    13. /*
    14. Important note:
    15. If you wish to use the live search option, it's important that you maintain the same class names for wrapping elements, e.g. the wrapping div and form.
    16. */
    17.  
    18. if($text=='categorieslayout'){
    19.  
    20.     $mainframe = &JFactory::getApplication();
    21.     $user = &JFactory::getUser();
    22.     $aid = (int) $user->get('aid');
    23.     $db = &JFactory::getDBO();
    24.  
    25.     switch ($params->get('categoriesListOrdering')) {
    26.  
    27.         case 'alpha':
    28.             $orderby = 'name';
    29.             break;
    30.  
    31.         case 'ralpha':
    32.             $orderby = 'name DESC';
    33.             break;
    34.  
    35.         case 'order':
    36.             $orderby = 'ordering';
    37.             break;
    38.  
    39.         case 'reversedefault':
    40.             $orderby = 'id DESC';
    41.             break;
    42.  
    43.         default:
    44.             $orderby = 'id ASC';
    45.             break;
    46.     }
    47.     $catFilter=($categoryFilter)? "id IN(".$categoryFilter.") AND" : '';
    48.     $query = "SELECT * FROM `#__k2_categories` WHERE ".$catFilter." published=1 AND trash=0 ";
    49.  
    50.     /*if(K2_JVERSION=='16'){
    51.         $query .= " AND access IN(".implode(',', $user->authorisedLevels()).") ";
    52.         if($mainframe->getLanguageFilter()) {
    53.             $languageTag = JFactory::getLanguage()->getTag();
    54.             $query .= " AND language IN (".$db->Quote($languageTag).", ".$db->Quote('*').") ";
    55.         }
    56.        
    57.     }
    58.     else {
    59.         $query .= " AND access <= {$aid}";
    60.     }*/
    61.  
    62.     $query .= " ORDER BY {$orderby}";
    63.  
    64.     $db->setQuery($query);
    65.     $rows = $db->loadObjectList();
    66. //var_Dump( $query );
    67.     ?>
    68.     <div id="k2ModuleBox<?php echo $module->id; ?>" class="k2SearchBlock<?php if($params->get('moduleclass_sfx')) echo ' '.$params->get('moduleclass_sfx'); if($params->get('liveSearch')) echo ' k2LiveSearchBlock'; ?>">
    69.     <?php
    70.     echo '<table class="k2ModuleBoxCatsLayout"><tbody>';
    71.     foreach($rows as $k=>$row){
    72.         if($k%3==0){
    73.             echo "<tr>";
    74.         }
    75.         echo "<td>";
    76.             $img = ($row->image)? '<img class="catImg" src="'.JURI::root().'media/k2/categories/'.$row->image.'" />' : '';
    77.  
    78.             echo '<a href="'.urldecode(JRoute::_(K2HelperRoute::getCategoryRoute($row->id.':'.urlencode($row->alias)))).'">'.$img.'<div class="catTitle">'.$row->name.'</div></a>';
    79.         echo "</td>";
    80.         if(($k+1)%3==0) echo "</tr>";
    81.     }
    82.     if(($k+1)%3!=0) echo str_repeat('<td class="noitem"></td>', (3-(($k+1)%3))). "</tr>";
    83.     echo '</tbody></table>';
    84.     echo '</div>';
    85.  
    86. }else{
    87. ?>
    88.  
    89. <div id="k2ModuleBox<?php echo $module->id; ?>" class="k2SearchBlock<?php if($params->get('moduleclass_sfx')) echo ' '.$params->get('moduleclass_sfx'); if($params->get('liveSearch')) echo ' k2LiveSearchBlock'; ?>">
    90.     <form action="<?php echo JRoute::_('index.php?option=com_k2&view=itemlist&task=search'); ?>" method="get" autocomplete="off" class="k2SearchBlockForm">
    91.  
    92.         <input type="text" value="<?php echo $text; ?>" name="searchword" maxlength="<?php echo $maxlength; ?>" size="<?php echo $width; ?>" alt="<?php echo $button_text; ?>" class="inputbox" onblur="if(this.value=='') this.value='<?php echo $text; ?>';" onfocus="if(this.value=='<?php echo $text; ?>') this.value='';" />
    93.  
    94.         <?php if($button): ?>
    95.         <?php if($imagebutton): ?>
    96.         <input type="image" value="<?php echo $button_text; ?>" class="button" onclick="this.form.searchword.focus();" src="<?php echo JURI::base(true); ?>/components/com_k2/images/fugue/search.png" />
    97.         <?php else: ?>
    98.         <input type="submit" value="<?php echo $button_text; ?>" class="button" onclick="this.form.searchword.focus();" />
    99.         <?php endif; ?>
    100.         <?php endif; ?>
    101.  
    102.         <input type="hidden" name="categories" value="<?php echo $categoryFilter; ?>" />
    103.         <?php if(!$app->getCfg('sef')): ?>
    104.         <input type="hidden" name="option" value="com_k2" />
    105.         <input type="hidden" name="view" value="itemlist" />
    106.         <input type="hidden" name="task" value="search" />
    107.         <?php endif; ?>
    108.         <?php if($params->get('liveSearch')): ?>
    109.         <input type="hidden" name="format" value="html" />
    110.         <input type="hidden" name="t" value="" />
    111.         <input type="hidden" name="tpl" value="search" />
    112.         <?php endif; ?>
    113.     </form>
    114.  
    115.     <?php if($params->get('liveSearch')): ?>
    116.     <div class="k2LiveSearchResults"></div>
    117.     <?php endif; ?>
    118. </div>
    119. <?php
    120. }


    Вывод начинается со строки

    Код (PHP):
    1. foreach($rows as $k=>$row){


    Верно ли условие для проверки наличия статей или где-то я ошибся?:

    Код (PHP):
    1. <?php if ($subCategory->numOfItems > 0) : ?>
    2. ....
    3. <?php endif; ?>


    Не знаю куда его вставить или как пеработать? Буду благодарен за любую помощь.
     
  2.  
  3. OlegM
    Offline

    OlegM Russian Joomla! Team Команда форума

    Регистрация:
    12.04.2007
    Сообщения:
    4 356
    Симпатии:
    370
    Пол:
    Мужской
    $subCategory откуда взялся?
    Тогда уж $row->numOfItems, если оно там есть. Но это можно проверить с помощью var_dump($row);
     
  4. Orlando
    Offline

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

    Регистрация:
    02.10.2014
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    Тогда как будет выглядеть законченная версия?..
    --- добавлено: 03.10.2014, первое сообщение размещено: 03.10.2014 ---
    Я модифицировал вот так:

    Код (PHP):
    1. foreach($rows as $k=>$row){
    2.         if ($row->numOfItems > 0) :
    3.         if($k%3==0){
    4.             echo "<tr>";
    5.         }
    6.         echo "<td>";
    7.             $img = ($row->image)? '<img class="catImg" src="'.JURI::root().'media/k2/categories/'.$row->image.'" />' : '';
    8.  
    9.             echo '<a href="'.urldecode(JRoute::_(K2HelperRoute::getCategoryRoute($row->id.':'.urlencode($row->alias)))).'">'.$img.'<div class="catTitle">'.$row->name.'</div></a>';
    10.         echo "</td>";
    11.         if(($k+1)%3==0) echo "</tr>";
    12.         endif;
    13.     }

    не работает (((
     
  5. OlegM
    Offline

    OlegM Russian Joomla! Team Команда форума

    Регистрация:
    12.04.2007
    Сообщения:
    4 356
    Симпатии:
    370
    Пол:
    Мужской
    и не будет.

    Для начала определи количество статей в категории. Смотри функцию countCategoryItems в хелпере k2tools.
    Стандартная штука
    Код (PHP):
    1. $row->numOfItems = modK2ToolsHelper::countCategoryItems($row->id);

    В твоем случае должно быть типа
    Код (PHP):
    1. if (modK2ToolsHelper::countCategoryItems($row->id) > 0) :
     
  6. Orlando
    Offline

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

    Регистрация:
    02.10.2014
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    Вот код, который у меня получился:

    Код (PHP):
    1. foreach($rows as $k=>$row){  
    2.         if (modK2ToolsHelper::countCategoryItems($row->id) > 0) :
    3.         if($k%3==0){
    4.             echo "<tr>";
    5.         }
    6.         echo "<td>";
    7.             $img = ($row->image)? '<img class="catImg" src="'.JURI::root().'media/k2/categories/'.$row->image.'" />' : '';
    8.  
    9.             echo '<a href="'.urldecode(JRoute::_(K2HelperRoute::getCategoryRoute($row->id.':'.urlencode($row->alias)))).'">'.$img.'<div class="catTitle">'.$row->name.'</div></a>';
    10.         echo "</td>";
    11.         if(($k+1)%3==0) echo "</tr>";
    12.         endif;
    13.     }
     
    Последнее редактирование: 03.10.2014
  7. OlegM
    Offline

    OlegM Russian Joomla! Team Команда форума

    Регистрация:
    12.04.2007
    Сообщения:
    4 356
    Симпатии:
    370
    Пол:
    Мужской
    Код (PHP):
    1. $i = 0;
    2. foreach($rows as $row) {  
    3.     if (modK2ToolsHelper::countCategoryItems($row->id) > 0) :
    4.         if ($i%3 == 0) echo "<tr>";
    5.         echo "<td>";
    6.             $img = ($row->image)? '<img class="catImg" src="'.JURI::root().'media/k2/categories/'.$row->image.'" />' : '';
    7.  
    8.             echo '<a href="'.urldecode(JRoute::_(K2HelperRoute::getCategoryRoute($row->id.':'.urlencode($row->alias)))).'">'.$img.'<div class="catTitle">'.$row->name.'</div></a>';
    9.         echo "</td>";
    10.         if(($i+1)%3==0) echo "</tr>";
    11.         $i++;
    12.     endif;
    13. }
     
    Orlando нравится это.
  8. Orlando
    Offline

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

    Регистрация:
    02.10.2014
    Сообщения:
    4
    Симпатии:
    0
    Пол:
    Мужской
    Супер, теперь всё работает как надо! Благодарю Олег!
    В любом случае прилагаю, получившийся код. Для тех кто не в курсе, это модифицированная часть кода модуля k2tools (search box), если исползовать её как template overrides (/templates/ваш шаблон/html/mod_k2_tools), можно получить удобный вывод категорий в виде равномерно заполняемой таблицы с фотографиями от каждой категории. При клике на которую осуществляется переход в категорию. Настройка осуществляется посредством выбора нужных категорий в параметрах searchbox модуля k2tools. Отедльная благодарность Олегу за доработку части, которая позволяет скрыть пустые категории и sherza за допиливание k2tools.

    Код (PHP):
    1. <?php
    2. /**
    3. * @version        $Id: search.php 1492 2012-02-22 17:40:09Z joomlaworks@gmail.com $
    4. * @package        K2
    5. * @author        JoomlaWorks http://www.joomlaworks.net
    6. * @copyright    Copyright (c) 2006 - 2012 JoomlaWorks Ltd. All rights reserved.
    7. * @license        GNU/GPL license: http://www.gnu.org/copyleft/gpl.html
    8. */
    9.  
    10. // no direct access
    11. defined('_JEXEC') or die('Restricted access');
    12.  
    13. /*
    14. Important note:
    15. If you wish to use the live search option, it's important that you maintain the same class names for wrapping elements, e.g. the wrapping div and form.
    16. */
    17.  
    18. if($text=='categorieslayout'){
    19.  
    20.     $mainframe = &JFactory::getApplication();
    21.     $user = &JFactory::getUser();
    22.     $aid = (int) $user->get('aid');
    23.     $db = &JFactory::getDBO();
    24.  
    25.     switch ($params->get('categoriesListOrdering')) {
    26.  
    27.         case 'alpha':
    28.             $orderby = 'name';
    29.             break;
    30.  
    31.         case 'ralpha':
    32.             $orderby = 'name DESC';
    33.             break;
    34.  
    35.         case 'order':
    36.             $orderby = 'ordering';
    37.             break;
    38.  
    39.         case 'reversedefault':
    40.             $orderby = 'id DESC';
    41.             break;
    42.  
    43.         default:
    44.             $orderby = 'id ASC';
    45.             break;
    46.     }
    47.     $catFilter=($categoryFilter)? "id IN(".$categoryFilter.") AND" : '';
    48.     $query = "SELECT * FROM `#__k2_categories` WHERE ".$catFilter." published=1 AND trash=0 ";
    49.  
    50.     /*if(K2_JVERSION=='16'){
    51.         $query .= " AND access IN(".implode(',', $user->authorisedLevels()).") ";
    52.         if($mainframe->getLanguageFilter()) {
    53.             $languageTag = JFactory::getLanguage()->getTag();
    54.             $query .= " AND language IN (".$db->Quote($languageTag).", ".$db->Quote('*').") ";
    55.         }
    56.    
    57.     }
    58.     else {
    59.         $query .= " AND access <= {$aid}";
    60.     }*/
    61.  
    62.     $query .= " ORDER BY {$orderby}";
    63.  
    64.     $db->setQuery($query);
    65.     $rows = $db->loadObjectList();
    66. //var_Dump( $query );
    67.     ?>
    68.     <div id="k2ModuleBox<?php echo $module->id; ?>" class="k2SearchBlock<?php if($params->get('moduleclass_sfx')) echo ' '.$params->get('moduleclass_sfx'); if($params->get('liveSearch')) echo ' k2LiveSearchBlock'; ?>">
    69.     <?php
    70.     echo '<table class="k2ModuleBoxCatsLayout"><tbody>';
    71.     $i = 0;
    72. foreach($rows as $row) {
    73.     if (modK2ToolsHelper::countCategoryItems($row->id) > 0) :
    74.         if ($i%3 == 0) echo "<tr>";
    75.         echo "<td>";
    76.             $img = ($row->image)? '<img class="catImg" src="'.JURI::root().'media/k2/categories/'.$row->image.'" />' : '';
    77.             echo '<a href="'.urldecode(JRoute::_(K2HelperRoute::getCategoryRoute($row->id.':'.urlencode($row->alias)))).'">'.$img.'<div class="catTitle">'.$row->name.'</div></a>';
    78.         echo "</td>";
    79.         if(($i+1)%3==0) echo "</tr>";
    80.         $i++;
    81.     endif;
    82. }
    83.     if(($k+1)%3!=0) echo str_repeat('<td class="noitem"></td>', (3-(($k+1)%3))). "</tr>";
    84.     echo '</tbody></table>';
    85.     echo '</div>';
    86. }else{
    87. ?>
    88.  
    89. <div id="k2ModuleBox<?php echo $module->id; ?>" class="k2SearchBlock<?php if($params->get('moduleclass_sfx')) echo ' '.$params->get('moduleclass_sfx'); if($params->get('liveSearch')) echo ' k2LiveSearchBlock'; ?>">
    90.     <form action="<?php echo JRoute::_('index.php?option=com_k2&view=itemlist&task=search'); ?>" method="get" autocomplete="off" class="k2SearchBlockForm">
    91.  
    92.         <input type="text" value="<?php echo $text; ?>" name="searchword" maxlength="<?php echo $maxlength; ?>" size="<?php echo $width; ?>" alt="<?php echo $button_text; ?>" class="inputbox" onblur="if(this.value=='') this.value='<?php echo $text; ?>';" onfocus="if(this.value=='<?php echo $text; ?>') this.value='';" />
    93.  
    94.         <?php if($button): ?>
    95.         <?php if($imagebutton): ?>
    96.         <input type="image" value="<?php echo $button_text; ?>" class="button" onclick="this.form.searchword.focus();" src="<?php echo JURI::base(true); ?>/components/com_k2/images/fugue/search.png" />
    97.         <?php else: ?>
    98.         <input type="submit" value="<?php echo $button_text; ?>" class="button" onclick="this.form.searchword.focus();" />
    99.         <?php endif; ?>
    100.         <?php endif; ?>
    101.  
    102.         <input type="hidden" name="categories" value="<?php echo $categoryFilter; ?>" />
    103.         <?php if(!$app->getCfg('sef')): ?>
    104.         <input type="hidden" name="option" value="com_k2" />
    105.         <input type="hidden" name="view" value="itemlist" />
    106.         <input type="hidden" name="task" value="search" />
    107.         <?php endif; ?>
    108.         <?php if($params->get('liveSearch')): ?>
    109.         <input type="hidden" name="format" value="html" />
    110.         <input type="hidden" name="t" value="" />
    111.         <input type="hidden" name="tpl" value="search" />
    112.         <?php endif; ?>
    113.     </form>
    114.  
    115.     <?php if($params->get('liveSearch')): ?>
    116.     <div class="k2LiveSearchResults"></div>
    117.     <?php endif; ?>
    118. </div>
    119. <?php
    120. }
     
    Последнее редактирование: 03.10.2014

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

Загрузка...