ti-enxame.com

Qual é o método correto para obter o alias da página ativa

Quero carregar alguns JS, mas apenas na página em que é necessário.

Estou tentando usar o alias do artigo ativo para determinar isso.

Meu código no arquivo component.php é:

   $path = &JFactory::getURI()->getPath();
   $length = strlen($path);

   for ($i = $length; $i >= 0 ; $i--)
         if ($path[$i] == '/')
            return substr($path, $i + 1, $length - $i - 1);

   $alias = $path;

e esta parte na <cabeça>:

if ($alias == "elearning")) { ?>
    <script src="/media/system/js/ddslick.js" type="text/javascript"></script>
<?php } ?>

Apenas não parece funcionar.
Alguma sugestão sobre onde estou errado?

6
BodgeIT

Uma possibilidade é modificar levemente o layout para permitir mais controles de modelo. Isso não está diretamente relacionado à obtenção do alias do artigo, mas a outra abordagem.

Para fazer isso, adicione este campo dentro do arquivo templateDetails.xml

<field name="htmllayout" type="list" default="center"
    label="HTML Layout"
    description="Dynamic layout style from index.php"
    filter="Word"
>
    <option value="main">main</option>
    <option value="raw">Raw</option>
</field>

Você pode adicionar quantas opções precisar, tenho 2 como exemplo. Isso criará uma configuração no gerenciador de modelos. A abertura do modelo no gerenciador de modelos também deve permitir que você altere essa configuração. A chave é deixar o modelo atual no modo principal e, em seguida, duplicar o modelo (apenas duplica as configurações, não os arquivos). Neste segundo modelo, você pode alterar o Layout HTML e usar a guia "atribuição de menu" para especificar qual página pode ser usada. Portanto, no caso de um alias de um artigo, desde que o artigo tenha um item de menu associado a ele (provavelmente com o mesmo alias), deve ser bastante fácil atribuir esse modelo ao alias especificado (e todos os outros).

Então, basicamente, você terá um modelo especificado para uso somente em páginas específicas.

Isso também requer algumas edições no index.php.

adicione o seguinte ao topo do arquivo, dentro do primeiro bloco php:

$htmllayout = $this->params->get('htmllayout');

Então, em qualquer lugar que você precisar especificar algo diferente para um layout especial, faça o seguinte:

<?php if($htmllayout=='LAYOUTNAME'): ?>
anything you need here
<?php endif; ?>
1
Jordan Ramstad

Se você estiver falando sobre o alias do artigo, chame o modelo de conteúdo ou leia-o no banco de dados.

Se você está falando sobre o alias no URL, não é fácil obtê-lo: o Joomla tem muitas maneiras de gerá-lo: será diferente se você chegar ao artigo:

  • através de um blog ou lista de categorias, será baseado no alias do artigo;
  • através de um item de menu direto, ele será baseado no alias do item de menu;
  • através de uma pesquisa, o Joomla decide;
  • você tem uma extensão SEF? você faz suas próprias regras

E isso é apenas para a última seção do alias; a primeira parte (ou 'caminho') depende da navegação que o levou ao artigo.

Para se ter uma idéia de quão complexo isso é, uma extensão SEF convencional chama o front-end para obter o alias, pois eles obviamente descobriram que não era confiável gerar um alias no back-end.

Conclusão: esqueça o apelido.

Maneiras de contornar isso: $ input = JFactory :: getApplication () -> input;

  • Use o ID do item de menu: $ input-> get ('Itemid');
  • Use o nome do componente/exibição: $ input-> get ('option'). '.' . $ input-> get ('view') ;;
  • Use o ID do artigo: $ input-> get ('id'); (mas verifique se option = com_content & view = article)

Espero que isso responda sua pergunta.

1
Riccardo Zorn

Se você deseja carregar um js apenas em determinadas páginas, tente usar o jumi. Aquele wokerd para mim. http://extensions.joomla.org/extensions/core-enhancements/coding-a-scripts-integration/custom-code-in-content/102

0
Eva Farkasne