joomlagovbr/IDG-2013

Problema na geração de url's amigáveis no módulo de notícias em destaque.(mod_chamadas)

Closed this issue · 11 comments

Boa tarde, estou com um problema quando habilito as url's amigáveis. O módulo de rescrita de url está ativado no administrador e o .htacess configurado, tanto que funciona todos os links do site em modo amigável menos o do módulo de notícias da página inicial (mod_chamadas). A construção do link da notícia fica quebrada desse tipo:

https://dominio/novojoomla/?id=705 clica e dá 404 categoria não encontrada

errourl

Tentei várias configurações, testei várias versões aqui além de outras tentativas sem sucesso. Alguém já passou por isso? A única solução que encontrei foi instalar outro módulo de notícias (extensão), aí funcionou perfeitamente a url amigável, mas queria usar o padrão mesmo. Se for um erro que só acontece comigo e tiverem alguma sugestão de correção me manda um help no e-mail rsss ( mr1maskot@gmail.com ) Agradeceria! valeu!

Tentei comitar, mas por algum motivo nao foi.

no arquivo mod_chamadas/helper.php

alterar a função getLinks.

public static function getLink($params, $fields = array('simple', 'menu', 'article'), $content_item = false, $isJoomlaArticle = true )
{
	$simple  = $fields[0];
	$menu    = $fields[1];
	$article = $fields[2];
	$link    = '';

	if( $params->get($simple, '' ) != '' )
	{
		$link = str_ireplace('{SITE}/', JURI::root(), $params->get($simple ) );
	}
	elseif( $params->get($menu, '' ) != '' )
	{
		$application = JFactory::getApplication();
		$cms_menu = $application->getMenu();
		$menu_item = $cms_menu->getItem( $params->get($menu) );
		$link = JRoute::_($menu_item->link.'&Itemid='.$menu_item->id);
	}
	elseif( $params->get($article, '' ) != ''  )
	{
		if(ModChamadasHelper::getjVersion() < 2)
		{
			$link = JRoute::_(  'index.php?option=com_content&view=article&id='. $params->get($article, '') );
		}
		else
		{
			$link = JRoute::_(ContentHelperRoute::getArticleRoute( $params->get($article, '')));
		}
	}
	elseif($content_item && $isJoomlaArticle )
	{
		if(ModChamadasHelper::getjVersion() < 2)
		{
			$link = JRoute::_(  'index.php?option=com_content&view=article&id='.$content_item->id );
		}
		else
		{
			$link = JRoute::_(ContentHelperRoute::getArticleRoute( $content_item->id, $content_item->catid ));
		}

	}
	elseif($content_item)
	{
		if(@isset($content_item->link))
			$link = $content_item->link;
	}

	return $link;
}

Caro...
Achei a solução no grupo do google da equipe: [https://groups.google.com/forum/#!msg/joomlacalango/pThbduX6uZs/VeFMQfaaCAAJ;context-place=forum/joomlacalango]
Seguinte:

  • Vá no arquivo modules/mod_chamadas/helper.php
  • Altere, nas linhas 99 e 110 o sinal de ">" para o de "<" (nas duas linhas ele está testando se a versão é MAIOR QUE 2, quando na verdade deveria ser MENOR QUE 2)
  • Salve o arquivo e seja feliz!

Tenho enfrentado esse problema em vários sites.
Mesmo fazendo a correção do código, nem sempre resolve.
Pelo visto, esse mesmo problema acontece em outros módulos, não somente no mod_chamadas.
Não sei se é somente nessas duas linhas o problema.
Talvez o pessoal do projeto possa dar uma luz e corrigir ao menos esse erro no código, pois a grande maioria dos usuários não é de programadores...

@mlrmelo a dica do < funcionou pra mim. Estou começando o projeto agora e fazendo alguns testes. Mas pelo que você falou é um problema que ocorre em outros módulos, se souber de algo nos avise por gentileza. Valeu cara!

Pessoal...
Estou enfrentando um problema no mod_chamadas que está me tirando o sono...
Existe um bug (já reportada a solução) para o mod_chamadas (arquivo helper.php) que, quando utilizamos URL's amigáveis e Mod_Rewrite, ele fica redirecionando para a página inicial.
A solução proposta é, nas linhas 99 e 110, substituir o "> 2" por "< 2" (aqui ele está verificando a versão do helper.php, se é anterior ou posterior à versão 2).
Pois bem... Fiz a correção e resolveu QUASE tudo...
Entretanto, há mod_chamadas que resolveu e há mod_chamadas que não resolveu (no mesmo site).
Fui olhar os logs e descobri que o erro ocorre na linha 95, com a seguinte mensagem:

PHP Notice: Trying to get property of non-object in /var/www/****/modules/mod_chamadas/helper.php on line 95, referer: http://www.****.***.br/

Ao olhar o código, percebi que essa linha está dentro de um teste (abaixo, $link = JRoute::_($menu_item->link.'&Itemid='.$menu_item->id);):

    public static function getLink($params, $fields = array('simple', 'menu', 'article'), $content_item = false, $isJoomlaArticle = true )
    {
        $simple  = $fields[0];
        $menu    = $fields[1];
        $article = $fields[2];
        $link    = '';

        if( $params->get($simple, '' ) != '' )
        {
            $link = str_ireplace('{SITE}/', JURI::root(), $params->get($simple ) );
        }
        elseif( $params->get($menu, '' ) != '' )
        {
            $application = JFactory::getApplication();
            $cms_menu = $application->getMenu();
            $menu_item = $cms_menu->getItem( $params->get($menu) );
            $link = JRoute::_($menu_item->link.'&Itemid='.$menu_item->id);

        }
        elseif( $params->get($article, '' ) != ''  )
        {
            if(ModChamadasHelper::getjVersion() < 2)
            {
                $link = JRoute::_(  'index.php?option=com_content&view=article&id='. $params->get($article, '') );
            }
            else
            {
                $link = JRoute::_(ContentHelperRoute::getArticleRoute( $params->get($article, '')));
            }
        }
        elseif($content_item && $isJoomlaArticle )
        {
            if(ModChamadasHelper::getjVersion() < 2)
            {
                $link = JRoute::_(  'index.php?option=com_content&view=article&id='.$content_item->id );
            }
            else
            {
                $link = JRoute::_(ContentHelperRoute::getArticleRoute( $content_item->id, $content_item->catid ));
            }

        }
        elseif($content_item)
        {
            if(@isset($content_item->link))
                $link = $content_item->link;
        }

        return $link;
    }

Ao que parece, ele está verificando se é um item de menu.
Sei que dá pra contornar, criando um item de menu, mas isso é "quebra-galho". Imagina criar um item de menu pra cada artigo!
Assim, pergunto: Alguém sabe como resolver?

O problema da troca do ">" pelo "<" já foi corrigido...
Obrigado, @tiagovtg

Closed!