Onde $ this-> baseurl é definido no joomla?

14

Eu fiz essa pergunta no stackoverflow.com primeiro (pergunta aqui ). Nos comentários, você pode ler que seria melhor fazer essa pergunta aqui.

No meu site joomla estou usando, echo $this->baseurl;mas ele retorna o URL que contém "/index.php". Eu quero mudar isso para remover "/index.php" do baseurl. Mas não consigo encontrar a linha de definição de $this->baseurl;.

Eu encontrei este tópico, mas isso é baseado no modelo do proprietário da pergunta e, no meu modelo, não existe algo assim.

Sugestões muito apreciadas :)

Therk
fonte

Respostas:

14

$this->baseurl;é basicamente o atalho para JUri::base(). Ele obtém a URL que você especificou como live_sitevariável no seu arquivo configuration.php . Se isso não tiver valor, ele usará alguma mágica do PHP com base em algumas variáveis.

Então, vamos fazer alguns testes. Por favor, reporte os resultados de volta:

Teste 1:

<?php
  echo 'Rule 1: ' . JUri::base() . '\n';
  echo 'Rule 2: ' . $_SERVER['PHP_SELF'] . '\n';
  echo 'Rule 3: ' . $_SERVER['REQUEST_URI'] . '\n';
  echo 'Rule 4: ' . $_SERVER['SCRIPT_NAME'] . '\n';
?>

Teste 2:

<?php
    echo JUri::base();
    echo JUri::base(true);
?>

Teste 3:

Na Configuração Global (back-end do Joomla), tente definir a reescrita do URL como Sim . Se isso não funcionar, leia as etapas 1 , 2 e 5 da seção Apache nesta página e tente novamente.


Teste 4:

Na parte superior do arquivo index.php do seu modelo , adicione o seguinte

<?php
    $this->baseurl = JUri::base();
?>
Lodder
fonte
Oi, obrigado pela sua resposta. Mudei a live_sitevariável no arquivo configuration.php para o meu URL (nada mudou). Aqui estão os resultados: Regra 1: my-url.com Regra 2: /index.php Regra 3: / Regra 4: /index.php
Therk
@Therk - ok, e na sua configuração global, você tem a reescrita de URL ativada ou desativada?
quer
@Therk - veja o teste 2 na minha resposta
Lodder
você quer dizer mod_rewrite? Isso está desativado na configuração do Joomla.
Therk
Teste 2: echo JUri::base()retorna " myurl.com " e echo JUri::base(true)não retorna nada
Therk
8

O $this->baseurl;é um atalho a ser usado dentro de um modelo, em vez de chamar o JURI:base();método, da classe JURI. Faz parte do núcleo e você pode encontrá-lo em/libraries/joomla/environment/uri.php (~line 218).

Se você observar o método, verá que ele verifica o arquivo de configuração para ver se a $live_urlvariável está definida. Se sim, ele retornará esse URL, caso contrário, passará por várias outras verificações e retornará seu URI base real.

Provavelmente você tem a variável live_url definida na sua configuration.phpque inclui a index.phpno final. Verifique lá ...

Outra possibilidade é que seu sistema de modelo / modelo atual tenha definido em algum lugar a $this->baseurlpropriedade. Você pode substituir facilmente o $this->baseurlinterior do seu modelo redefinindo-o novamente na parte superior do index.phparquivo do seu modelo, como:$this->baseurl = JURI::base();

*Atualizar:

  • Mencionei onde você pode encontrar o método, mas isso não significa que você deve ir lá e fazer quaisquer modificações no núcleo. Isso foi apenas para fins informativos.

Atualização 2 - para referências futuras

Para concluir as informações fornecidas neste post, o JURI::base($pathonly boolean)argumento leva um, o $pathonlyqual é um tipo de dados booleano - falseé o padrão.

Com $pathonly = true, ele retornará apenas o caminho para o site.

Exemplos:

<?php echo JURI::base(); ?> Would echo something like: http:://localhost/joomla25/
<?php echo JURI::base(true); ?> Would echo: /joomla25

Observe que quando $ pathonly = true , a barra final no final do caminho do URI é omitida.

FFrewin
fonte
Obrigado pela sua resposta, encontrei o método. Devo evitar mudar alguma coisa lá? No arquivo configuration.php, defini a variável live_sitecomo meu URL e nada mais (não adicionei index.php em algum lugar).
Therk
Sim, nada para mudar no núcleo. A única exceção é se alguém já fez algo lá anteriormente ... que fez com que a função funcionasse dessa maneira. Você realmente precisa definir a variável live_url na sua configuração? Geralmente não é necessário.
FFrewin
Ok :) Não importa se eu defino a variável live_url. Isso não muda nada ... O index.php está sempre aparecendo. Eu poderia resolver o problema usando código, mas isso seria muito hacky e extremamente feio e não quero fazer isso. Então, eu quero modificar baseurl que o index.php não está nele.
Therk
Uma maneira alternativa e rápida é definir sua variável baseurl personalizada dentro do seu modelo e usá-la. $ mybaseurl = JURI: base (verdadeiro); eco $ mybaseurl;
FFrewin
E mais uma coisa que você pode verificar é se a alteração do seu modelo tem algum efeito no $ this-> baseurl.
FFrewin