Ниже представлена небольшая шпаргалка с основными классами, а также методами, наиболее часто используемыми при разработке:
Документ
- $doc = JFactory::getDocument()
- Объект документа
- $doc->getTitle()
- Получить заголовок страницы
- $doc->setTitle()
- Задать заголовок страницы
- $doc->getDescription()
- Получить значение meta Description
- $doc->setDescription()
- Задать значение meta Description
- $doc->getMetaData('keywords')
- Получить keywords
- $doc->setMetaData('keywords')
- Задать keywords
- JHtml::_('script', 'jquery.min.js')
- Подключить javascript в блок head
- JHtml::_('stylesheet', 'user.css');
- Подключить css в блок head
База данных
Выборка \ SELECT
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('user_id', 'profile_key', 'profile_value', 'ordering')));
$query->from($db->quoteName('#__user_profiles'));
$query->where($db->quoteName('profile_key') . ' LIKE '. $db->quote('\'custom.%\''));
$query->order('ordering ASC');
$db->setQuery($query);
$results = $db->loadObjectList();
Джоины \ JOIN
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query
->select(array('a.*', 'b.username', 'b.name'))
->from($db->quoteName('#__content', 'a'))
->join('INNER', $db->quoteName('#__users', 'b') . ' ON (' . $db->quoteName('a.created_by') . ' = ' . $db->quoteName('b.id') . ')')
->where($db->quoteName('b.username') . ' LIKE \'a%\'')
->order($db->quoteName('a.created') . ' DESC');
Вставка \ INSERT
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$columns = array('user_id', 'profile_key', 'profile_value', 'ordering');
$values = array(1001, $db->quote('custom.message'), $db->quote('Inserting a record using insert()'), 1);
$query
->insert($db->quoteName('#__user_profiles'))
->columns($db->quoteName($columns))
->values(implode(',', $values));
// Set the query using our newly populated query object and execute it.
$db->setQuery($query);
$db->execute();
Обновление \ UPDATE
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$fields = array(
$db->quoteName('profile_value') . ' = ' . $db->quote('Updating custom message for user 1001.'),
$db->quoteName('ordering') . ' = 2'
);
$conditions = array(
$db->quoteName('user_id') . ' = 42',
$db->quoteName('profile_key') . ' = ' . $db->quote('custom.message')
);
$query->update($db->quoteName('#__user_profiles'))->set($fields)->where($conditions);
$db->setQuery($query);
$result = $db->execute();
Удаление \ DELETE
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$conditions = array(
$db->quoteName('user_id') . ' = 1001',
$db->quoteName('profile_key') . ' = ' . $db->quote('custom.%')
);
$query->delete($db->quoteName('#__user_profiles'));
$query->where($conditions);
$db->setQuery($query);
$result = $db->execute();
Получить подкатегории:
$jcats = JCategories::getInstance('Content'); //объект для работы с категориями
$cat = $jcats->get(8); //catalog category == 8
foreach ($cat->getChildren() as $id => $child) {
$sections[$id]['title'] = $child->title;
$sections[$id]['id'] = $child->id;
//..........
if ( $child->getChildren() ){
foreach ( $child->getChildren() as $cid => $deeperChild ){
$sections[$id]['subcats'][$cid]['id'] = $deeperChild->id;
$sections[$id]['subcats'][$cid]['title'] = $deeperChild->title;
}
} else{
//...........
}
}
Получить список материалов указанной категории с полями custom_fields:
public static function getItems(){
$modelC = JModelLegacy::getInstance('Category', 'ContentModel', array( 'ignore_request' => true ));
//здесь параметр 'ignore_request' => true означает, что модель "игнорирует запрос", то есть она не выцепляет самостоятельно состояние для модели из query string (catid, articleId, start итд)
//поэтому мы задаем ручками как бы "фильтры" (caregoryId, published=1) - устанавливаем состояние модели через метод setState(), чтобы затем вызвать метод getItems()
//полный список возможных фильтров вы можете увидеть в модели, в методе getListQuery, там она поэтапно собирает все возможные фильтры для выборки из бд благодаря методу getState()
$modelC->setState('category.id', 10); //для catId == 10
$modelC->setState('filter.published', 1);
$app = JFactory::getApplication('site');
$itemid = $app->input->get('id', 0, 'int') . ':' . $app->input->get('Itemid', 0, 'int');
$app->setUserState( 'com_content.category.list.' . $itemid . '.filter_order', 'ordering');
$app->setUserState( 'com_content.category.list.' . $itemid . '.filter_order_Dir', 'ASC');
$itms = $modelC->getItems();
$modelF = JModelLegacy::getInstance('Field', 'FieldsModel', array('ignore_request' => true));
$categoryFieldsIds = array(3,5); //для field_id == 3,5
foreach ( $itms as $itm ){
$itm->cfields = $modelF->getFieldValues($categoryFieldsIds, $itm->id);
}
return $itms;
}
Вывод модулей в компоненте \ переопределении \ странице ошибок error.php
jimport( 'joomla.application.module.helper' );
$module = JModuleHelper::getModules('our-module');
$attribs['style'] = 'xhtml';
echo JModuleHelper::renderModule($module[0], $attribs);
Вывод плагина из группы content в шаблоне или переопределении:
$text = JHtml::_('content.prepare', $text); //для события onContentPrepare в классе модуля. в $text передаем искомую регулярку {pluginname} она же выдаст результат работы плагина
или:
$article = new stdClass;
$article->text = $text;
$params = new JObject;
JPluginHelper::importPlugin('content');
$dispatcher = JDispatcher::getInstance();
$dispatcher->trigger('onContentPrepare', array('some.context', &$article, &$params, 0));
Кастомный Layout из конкретного файла
$layout = new JLayoutFile('joomla.content.tags', JPATH_SITE . '/components/com_mycomponent/layouts');
$layout->render($itemTags);
Сессии
$session = JFactory::getSession();
$session->set( 'myVar', 500 ); // установка значения
$session->get('myVar', 'значение по умолчанию'); //получение значения
$session->getName(); //имя сессии
$session->getId(); //id сессии
Почта \ JMail
$mailer = JFactory::getMailer();
$mailer->IsHTML( true );
$mailer->setSender( array( 'email_отправителя', 'имя отправителя' ) );
$mailer->addRecipient( 'email_получателя' );
$mailer->addCC( 'email_получателя_копии' );
$mailer->setBody('<h1>Hello User!</h1>');
$mailer->send();
Генерация ЧПУ \ SEF
$link = JRoute::_(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid)); //здесь необходимо позаботиться, чтобы был подключен хелпер ContentHelperRoute // параметры: $this->item->slug - строка вида id_материала + ':' + alias материала //$this->item->catid категория материала