Aqui você vai encontrar uma coletânea de códigos que usei em algum momento nos arquivos do Joomla.
Um exemplo de onde usar isso: em substituições do tema (template overrides).
Para pegar o id da categoria usando o id do artigo:
$article = JTable::getInstance("content");
$article->load($item->articleid);
$cactid = $article->get('catid');
Para pegar a url amigável do artigo:
<?php
$article = JTable::getInstance("content");
$article->load($item->articleid);
// use slug somente se precisar de url não amigável
// $slug = $item->articleid.':'.$article->get('alias');
$link = JRoute::_(ContentHelperRoute::getArticleRoute($item->articleid, $article->get('catid'), $article->get('language')));
?>
Para pegar a categoria ou a categoria pai atual:
<?php
$category = JTable::getInstance('category');
$category->load($catid);
echo $category->parent_id;
?>
Para pegar os parâmetros do plugin dentro do plugin
<?php
$param = $this->params->get('paramName', defaultValue);
?>
Para pegar os parâmetros do plugin fora do plugin
<?php
$plugin =JPluginHelper::getPlugin('editors','codemirror');
$pluginParams =newJRegistry();
$pluginParams->loadString($plugin->params);
$param = $pluginParams->get('paramName','defaultValue');
?>
Para pegar os parâmetros do módulo dentro do módulo
<?php
$param = $params->get('paramName','defaultValue');
?>
Para pegar os parâmetros do módulo fora do módulo
<?php
$module =JModuleHelper::getModule('banners');
$moduleParams =newJRegistry();
$moduleParams->loadString($module->params);
$param = $moduleParams->get('paramName','defaultValue');
?>
Para pegar os parâmetros do componente dentro do componente
<?php
$app =JFactory::getApplication('site');
$componentParams = $app->getParams('com_content');
$param = $componentParams->get('paramName', defaultValue);
?>
Para pegar os parâmetros do componente fora do componente
<?php
$app =JFactory::getApplication('site');
$componentParams = $app->getParams('com_example');
$param = $componentParams->get('paramName', defaultValue);
?>
Para pegar os parâmetros do tema dentro do tema
<?php
$param = $this->params->get('paramName', defaultValue);
?>
Para pegar os parâmetros do tema padrão fora do tema
<?php
$app =JFactory::getApplication('site');
$template = $app->getTemplate(true);
$param = $template->params->get('paramName', defaultValue);
?>
Para pegar a primeira imagem em qualquer parte de um texto dos artigos
<?php
preg_match('/(?<!_)src=([\'"])?(.*?)\\1/',$item->introtext, $matches);
$image = $matches[2];
?>
Para pegar o caminho do tema padrão
<?php
$app = JFactory::getApplication();
$tpath = JURI::base(true).'/templates/'.$app->getTemplate().'/';
?>
Para pegar o texto do artigo limitando o texto, removendo tags html (ou trocando)
<?php
//Limite de caracteres
$maxLimit = "200";
$text = preg_replace("/\r\n|\r|\n/", " ", $text);
// Em seguida, troca os marcadores <br /> com \n
$text = preg_replace("/<BR[^>]*>/i", " ", $text);
// Troca os marcadores <p> com \n\n
$text = preg_replace("/<P[^>]*>/i", " ", $text);
// Remove todos os marcadores
$text = strip_tags($text);
// Trunca o texto pelo limite de caracteres
$text = substr($text, 0, $maxLimit);
//$text = String::truncate($text, $maxLimit, '...', true);
// Deixa visível a última palavra que, no caso, foi cortada no meio
$text = preg_replace("/[.,!?:;]? [^ ]*$/", " ", $text);
// Adiciona reticências ao fim do texto
$text = trim($text) . '...' ;
// Troca \n com <br />
$text = str_replace("\n", " ", $text);
echo $text;
?>
Pegando o endereço da categoria do artigo com URL amigável:
<?php echo JRoute::_(ContentHelperRoute::getCategoryRoute($item->catslug)); ?>
Obtendo o plugin 'Artigos Relacionados' do tipo 'Conteúdo de Artigos'
<?php
$plugin = JPluginHelper::getPlugin('content', 'relatedarticles');
// Check if plugin is enabled
if ($plugin)
{
// Get plugin params
$pluginParams = new JRegistry($plugin->params);
$catids = $pluginParams->get('catids');
}
?>
Para acessar os parâmetros do item de menu atual
<?php
$app = JFactory::getApplication();
// Obtém o Item de Menu atualmente ativo
$currentMenuItem = $app->getMenu()->getActive();
// Obtém os parâmetros do Item de Menu atualmente ativo
$params = $currentMenuItem->params;
// Agora você pode pegar um parâmetro em particular
$yourParameter = $params->get('yourParameter');
?>
Para acessar os parâmetros de um item de menu com um ID já conhecido
<?php
$app = JFactory::getApplication();
// Obtém o ID do ítem de menu da URL
$input = JFactory::getApplication()->input;
$itemId = $input->get->get('Itemid', '0', 'INT');
// Obtém o ítem de menu do ID
$menuItem = $app->getMenu()->getItem($itemId);
// Obtém os parâmetros do ítem e menu
$params = $menuItem->params;
// Agora você escolhe qual parâmetro desejar
$yourParameter = $params->get('yourParameter');
?>
Para pegar o sufixo de classe de página do item de menu atualmente ativo:
<?php
$pageclass_sfx = JFactory::getApplication()->getMenu()->getActive()->params->get('pageclass_sfx');
?>
Para executar uma código somente se determinados sufixo de classe existir em um item de menu atualmente ativo
<?php
$tuaclasse = explode(' ',JFactory::getApplication()->getMenu()->getActive()->params->get('pageclass_sfx'));
?>
<?php if(in_array('troque pelo nome da classe',$tuaclasse)): ?>
<!-- restante do código -->
<?php endif;?>
Para obter o carregamento dos plugins de conteúdo do Joomla em qualquer texto
<?php
// Obtém os plugins de conteúdo, de forma que eles sejam aplicados ao texto desejado
// No exemplo abaixo, carregamos os plugins para um texto obtido de resultados de uma consulta ao banco de dados
$text = JHtml::_('content.prepare', $result->fulltext);
echo $text;
?>
Para obter o apelido do item de menu atual
<?php
$menuitemalias = JFactory::getApplication()->getMenu()->getActive()->alias;
?>
Para carregar módulos ou criar posições em qualquer lugar nos códigos do Joomla (temas, outros componentes, etc)
<?php
jimport('joomla.application.module.helper');
$position = 'contato-direita';
$attribs = array('style' => 'xhtml');
$modules = JModuleHelper::getModules($position);
foreach ($modules as $module) {
echo JModuleHelper::renderModule($module,$attribs);
}
?>
Para carregar apenas um campo personalizado por vez (disponíveis no Joomla 3.7 acima) em qualquer lugar nos códigos do Joomla (temas, outros componentes, etc)
<?php JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php');?>
<?php foreach ($this->item->jcfields as $kf => $field): ?>
<?php if ($field->name == 'descricao-adicional'): ?>
<div class="<?php echo $field->params->get('render_class'); ?>">
<?php echo $field->value; ?>
</div>
<?php endif;?>
<?php endforeach;?>
Para carregar todos os campos personalizados (disponíveis no Joomla 3.7 acima) em qualquer lugar nos códigos do Joomla (temas, outros componentes, etc)
Você pode usar o override do article/tmpl/default.php e dentro dele pegar o sufixo de classe da página para carregar dinamicamente o conteúdo
<?php
$yourParameter = explode(' ',JFactory::getApplication()->getMenu()->getActive()->params->get('pageclass_sfx'));
?>
Depois use uma condição para carregar os campos personalizados conforme a classe da página atual (sufixo de classe do item de menu)
No exemplo abaixo carrego o os campos personalizados em modo lista com os títulos dos grupos de campos a cada novo grupo
Para tudo dar certo, crie os grupos, crie os campos personalizados e habilite-os para as categorias e grupos mais adequados e desabilite o carregamento automático de cada um deles.
<?php if (in_array('perfis',$yourParameter) :?>
<div class="col-md-3 span3">
<?php JLoader::register('FieldsHelper', JPATH_ADMINISTRATOR . '/components/com_fields/helpers/fields.php'); ?>
<?php
$cf = '0';
?>
<?php foreach ($this->item->jcfields as $kf=>$field) : ?>
<?php
$count = $cf++;
$group[$count] = $this->item->jcfields[$kf]->group_title;
?>
<?php if (($group[$count-1] != $group[$count]) and ($field->value)) : ?>
<?php echo '<h3>'.$group[$count].'</h3>';?>
<?php endif;?>
<?php if (($group[$count-1] != $group[$count]) and ($field->value)) : ?>
<ul class="square-checkmark">
<?php endif;?>
<?php
if ($field->value){
echo '<li>'.$field->label . ': ' . $field->value.'</li>';
}
?>
<?php endforeach ?>
</ul>
</div>
<?php endif; ?>
Para identificar qual o idioma atual do site
<?php
$lang = JFactory::getLanguage();
if ($lang->getTag() == 'en-GB') {
\\whatever code
else {
}\\etc
?>
Para adicionar folhas de estilo externa
<?php
$document = JFactory::getDocument();
$document->addStyleSheet('change_for_url');
?>
Para adicionar javascript externo
<?php
$document = JFactory::getDocument();
$document->addScript('change_for_url');
?>
Para adicionar folhas de estilo internamente
<?php
$document = JFactory::getDocument();
$document->addStyleDeclaration('
.classe{ etc};
');
?>
Para adicionar javascript internamente
<?php
$document = JFactory::getDocument();
$document->addScriptDeclaration('
//código javascript
');
?>
Para preparar o conteúdo para exibir os plugins:
<?php
jimport('joomla.html.html.content');
echo JHtmlContent::prepare($text);
?>