Разработка на Joomla разширение: Как да получите глобални параметри при извличане на статии от базата данни?

В моето разширение извлякох статии от таблицата content по следния начин:

.......
.......
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select('id, catid, title, introtext, attribs);
$query->from('#__content');
$query->where('catid="'.$cid.'"');
$query->where('state="1"');
.......
.......

Тук мога да извлека attribs данни за всяка извличана статия.

Има ли лесен начин за извличане на параметри на статия от глобалните настройки (има ли някаква статична функция в Joomla?) или трябва ръчно да извлека params от таблицата extensions?


person user1448031    schedule 25.02.2014    source източник


Отговори (1)


Може да искате да използвате класа JComponentHelper, за да получите параметрите на компонента.

<?php

jimport( 'joomla.application.component.helper' );

$com_content_params = JComponentHelper::getParams('com_content');

За да получа статиите, не бих написал сам заявката, както правите вие, а вместо това ще използвам съответния JModel (JModelLegacy в Joomla 3).

Нещо, което би изглеждало така:

<?php

$model = JModel::getInstance('Articles', 'ContentModel');
$model->setState('filter.category_id', (int)$cid);
$articles = $model->getList();

Не знам дали този конкретен код ще работи, но със сигурност можете да направите малко проучване в Google за това. Духът е там: използвайте класовете, предоставени от Joomla, вместо да изтегляте неща директно от DB. Ще спечелите в поддръжката и качеството на кода.

person Bgi    schedule 25.02.2014
comment
Благодаря, че ме насочихте в правилната посока. Сега преработвам разширението си, като използвам JModelLegacy и изглежда, че работи добре. Но не мога да разбера как работи поръчката. Опитах нещо подобно: $model->setState('list.ordering', 'a.publish_up');, но не изглежда да има никакъв ефект върху изхода. Има ли още нещо, което трябва да направя, за да заработи поръчката? - person user1448031; 25.02.2014
comment
publish_up е зададено на 0 по подразбиране, опитайте created_date. - person Bgi; 25.02.2014
comment
Не, опитах няколко различни опции като title, hits, etc, но изглежда, че нито една от тях не работи. print_r($model->getItems()); извежда масив като този: Array ( [0] => stdClass Object ( [id] => 12 [title] => Test [alias] => test [introtext] => testtest [checked_out] => 0 [checked_out_time] => 0000-00-00 00:00:00 [catid] => 2 [created] => 2014-02-02 00:00:01................. Все още не мога да разбера защо подреждането не работи. Някаква идея? - person user1448031; 26.02.2014