что такое list и filter

Тема в разделе "Программирование", создана пользователем like-nix, 08.08.2015.

  1. Offline

    like-nix Недавно здесь

    Регистрация:
    29.02.2012
    Сообщения:
    14
    Симпатии:
    0
    Пол:
    Мужской
    Доброго времени суток.

    Пытаюсь понять как работают методы getState и setState у JmodelLegacy.
    Я пока начинаю только изучать Joomla, поэтому не судите строго.

    Я хочу сделать свой собственный модуль для отображения последних новостей.
    Я захотел посмотреть как работает модуль mod_articles_news

    И там я наткнулся на такой код:

    Код (CODE):
    1. // Get an instance of the generic articles model
    2.         $model = JModelLegacy::getInstance('Articles', 'ContentModel', array('ignore_request' => true));
    3.  
    4.         // Set application parameters in model
    5.         $appParams = JFactory::getApplication()->getParams();
    6.         $model->setState('params', $appParams);
    7.  
    8.         // Set the filters based on the module params
    9.         $model->setState('list.start', 0);
    10.         $model->setState('list.limit', (int) $params->get('count', 5));
    11.  
    12.         $model->setState('filter.published', 1);
    13.  
    14.         $model->setState('list.select', 'a.fulltext, a.id, a.title, a.alias, a.title_alias, a.introtext, a.state, a.catid, a.created, a.created_by, a.created_by_alias,' .
    15.             ' a.modified, a.modified_by, a.publish_up, a.publish_down, a.images, a.urls, a.attribs, a.metadata, a.metakey, a.metadesc, a.access,' .
    16.             ' a.hits, a.featured, a.language' );
    17.  
    18.         // Access filter
    19.         $access = !JComponentHelper::getParams('com_content')->get('show_noauth');
    20.         $authorised = JAccess::getAuthorisedViewLevels(JFactory::getUser()->get('id'));
    21.         $model->setState('filter.access', $access);
    22.  
    23.         // Category filter
    24.         $model->setState('filter.category_id', $params->get('catid', array()));
    25.  
    26.         // Filter by language
    27.         $model->setState('filter.language', $app->getLanguageFilter());
    28.  
    29.         // Set ordering
    30.         $ordering = $params->get('ordering', 'a.publish_up');
    31.         $model->setState('list.ordering', $ordering);
    32.         if (trim($ordering) == 'rand()') {
    33.             $model->setState('list.direction', '');
    34.         } else {
    35.             $model->setState('list.direction', 'DESC');
    36.         }
    37.  
    38.         //    Retrieve Content
    39.         $items = $model->getItems();

    Я прочитал конечно что компоненты Joomla разработаны с учетом MVC.

    В строчке

    Код (CODE):
    1. $model = JModelLegacy::getInstance('Articles', 'ContentModel', array('ignore_request' => true));


    Мы получаем модель компонента com_content.

    Потом идут строки кода:

    Код (CODE):
    1. $model->setState('list.start', 0);
    2.         $model->setState('list.limit', (int) $params->get('count', 5));
    3.  
    4.         $model->setState('filter.published', 1);
    5.  
    6.         $model->setState('list.select', 'a.fulltext, a.id, a.title, a.alias, a.title_alias, a.introtext, a.state, a.catid, a.created, a.created_by, a.created_by_alias,' .
    7.             ' a.modified, a.modified_by, a.publish_up, a.publish_down, a.images, a.urls, a.attribs, a.metadata, a.metakey, a.metadesc, a.access,' .
    8.             ' a.hits, a.featured, a.language' );

    А потом бац и строчка:

    Код (CODE):
    1. //    Retrieve Content
    2.         $items = $model->getItems();

    Я догадываюсь что в этой строчке срабатывает выборка из бд по указанному выше запросу.

    Подскажите где почитать про list и filter и как они работают.

    Спасибо.
     
  2.  
  3. woojin
    Offline

    woojin Местный Команда форума => Cпециалист <=

    Регистрация:
    31.05.2009
    Сообщения:
    3 204
    Симпатии:
    334
    Пол:
    Мужской
    Оффтопик (не в тему) - жми сюда!
     
  4. AKopytenko
    Offline

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

    Регистрация:
    01.09.2011
    Сообщения:
    1 963
    Симпатии:
    168
    Пол:
    Мужской
    Оффтопик (не в тему) - жми сюда!



    Код (PHP):
    1. /**
    2. * Method to get model state variables
    3. *
    4. * @param  string  $property  Optional parameter name
    5. * @param  mixed  $default  Optional default value
    6. *
    7. * @return  object  The property where specified, the state object where omitted
    8. *
    9. * @since  12.2
    10. */
    11. public function getState($property = null, $default = null)
    12. {
    13.    if (!$this->__state_set)
    14.    {
    15.      // Protected method to auto-populate the model state.
    16.      $this->populateState();
    17.  
    18.      // Set the model state set flag to true.
    19.      $this->__state_set = true;
    20.    }
    21.  
    22.    return $property === null ? $this->state : $this->state->get($property, $default);
    23. }
    24.  
    25. /**
    26. * Method to set model state variables
    27. *
    28. * @param  string  $property  The name of the property.
    29. * @param  mixed  $value  The value of the property to set or null.
    30. *
    31. * @return  mixed  The previous value of the property or null if not set.
    32. *
    33. * @since  12.2
    34. */
    35. public function setState($property, $value = null)
    36. {
    37.    return $this->state->set($property, $value);
    38. }

    Я в такие дебри не лазал, но, на сколько я понимаю - setState устанавливает параметры для работы модели (переменные из контроллера), а getState их получает для возможности просмотра текущего статуса.
     
  5. woojin
    Offline

    woojin Местный Команда форума => Cпециалист <=

    Регистрация:
    31.05.2009
    Сообщения:
    3 204
    Симпатии:
    334
    Пол:
    Мужской
    я то же, именно по этому указал место где написано более подробно чем просто показать код
     
  6. AKopytenko
    Offline

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

    Регистрация:
    01.09.2011
    Сообщения:
    1 963
    Симпатии:
    168
    Пол:
    Мужской
    Ну тогда может лучше хотя бы так:
    Общая документация для разработчиков
    Документация по разработке модулей (ещё ближе к теме...)

    А то всё равно, что сказать "поищи в интернете".
     
    Asylum нравится это.

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

Загрузка...