Pedaços de códigos para Joomla

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);
?>