LiveInternetMail.ru
Форум русской поддержки Joomla!® CMS
27.05.2012, 12:07:56 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 1.7 FAQ Joomla 1.5 FAQ Joomla 1.0 FAQ Правила форума Новости Joomla Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор Тема: SOS! Добавление дополнительного фильтра в модель вида блога  (Прочитано 471 раз)
0 Пользователей и 1 Гость смотрят эту тему.
titansword
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 36


« : 13.09.2011, 22:43:34 »

Задача состоит в том, чтобы добавить в блог категорий возможность фильтровать статьи по их дате снятия с публикации.
Начать решил с разбора модели category.php и нашел там функцию getItems() отвечающую (как я полагаю) за то, какие статьи подгружать.
Решил проверить своё предположение. Если заменить к примеру
Код
$model->setState('filter.category_id', $category->id);
на
Код
$model->setState('filter.category_id', 23);
Выводиться только материалы из  категории с id= 23.

Результат меня сильно воодушевил и чисто ради эксперимента, я  на радостях леплю в общий список фильтров
Код
$model->setState('filter.created_by', 43);

и... Ничего не происходит. Sad По идеи должны выводиться только статьи  с полем created_by равным 43, но выводятся почему то все.
Друзья, очень прошу помочь разобраться с этой проблемой. Заказчик уже брызжит слюной, а у меня никаких идей как решить эту проблему.

Здесь код функции если кому поможет.
Код
function getItems()
{
$params = $this->getState()->get('params');
$limit = $this->getState('list.limit');
 
if ($this->_articles === null && $category = $this->getCategory()) {
$model = JModel::getInstance('Articles', 'ContentModel', array('ignore_request' => true));
$model->setState('params', JFactory::getApplication()->getParams());
$model->setState('filter.category_id', $category->id);
$model->setState('filter.published', $this->getState('filter.published'));
$model->setState('filter.access', $this->getState('filter.access'));
$model->setState('filter.language', $this->getState('filter.language'));
$model->setState('list.ordering', $this->_buildContentOrderBy());
$model->setState('list.start', $this->getState('list.start'));
$model->setState('list.limit', $limit);
$model->setState('list.direction', $this->getState('list.direction'));
$model->setState('list.filter', $this->getState('list.filter'));
// filter.subcategories indicates whether to include articles from subcategories in the list or blog
$model->setState('filter.subcategories', $this->getState('filter.subcategories'));
$model->setState('filter.max_category_levels', $this->setState('filter.max_category_levels'));
$model->setState('list.links', $this->getState('list.links'));
 
if ($limit >= 0) {
$this->_articles = $model->getItems();
 
if ($this->_articles === false) {
$this->setError($model->getError());
}
}
else {
$this->_articles=array();
}
 
$this->_pagination = $model->getPagination();
}
 
return $this->_articles;
}
« Последнее редактирование: 14.09.2011, 00:36:48 от titansword » Записан
bzzik
JComments Tester
*

Репутация: +219/-0
Offline Offline

Пол: Мужской
Сообщений: 3798


Contra Gaming Community


« Ответ #1 : 11.10.2011, 10:48:29 »

По моему там надо было ещё в конструктор добавить поля для фильтрации.
Записан
Виталик
Группа развития
*****

Репутация: +76/-0
Offline Offline

Пол: Мужской
Сообщений: 1276



« Ответ #2 : 11.10.2011, 17:41:08 »

Результат меня сильно воодушевил и чисто ради эксперимента, я  на радостях леплю в общий список фильтров
Код
$model->setState('filter.created_by', 43);
что-бы это работало надо еще в формирование запроса к базе данных добавить условие выбора по автору
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Рейтинг@Mail.ru Rambler Top100 Powered by SMF 1.1.16 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet