joomlaの$ this-> baseurlはどこで定義されていますか?


14

最初にstackoverflow.comでこの質問をしました(質問はこちら)。コメントで、ここでその質問をした方が良いと読むことができます。

私が使用しているjoomla Webサイトecho $this->baseurl;では、「/ index.php」を含むURLを返します。baseurlから「/index.php」を削除するように変更したいです。しかし、私はの定義行を見つけることができません$this->baseurl;

私はこのスレッドを見つけましたが、これは質問所有者のテンプレートに基づいており、私のテンプレートにはこのようなものはありません。

提案は非常に感謝します:)

回答:


14

$this->baseurl;は基本的にのショートカットですJUri::base()configuration.phpファイルでlive_site変数として指定したURLを取得します。これに値がない場合は、いくつかの変数に基づいたPHPマジックを使用します。

それでは、いくつかのテストを実行しましょう。結果を報告してください:

テスト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';
?>

テスト2:

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

テスト3:

グローバル設定(Joomlaバックエンド)で、URL書き換えYesに設定してみてください。これが動作しない場合は、手順読ん12及び5このページのApacheの部分を、再度実行してください。


テスト4:

テンプレートのindex.phpファイルの先頭に、次を追加します

<?php
    $this->baseurl = JUri::base();
?>

こんにちは、ご回答ありがとうございます。私は変更live_site私のURLにconfiguration.phpファイルで変数を(何も変更されません)。結果は次のとおりです。ルール1: my-url.com ルール2: /index.php ルール3: / ルール4: /index.php
Therk

@Therk-わかりました、そしてあなたのグローバル設定では、URL書き換えをオンまたはオフにしていますか?
Lodder 14年

@Therk -私の答えでテスト2を参照してください
Lodder

mod_rewriteを意味しますか?これは、Joomla構成ではオフになっています。
Therk 14年

テスト2:echo JUri::base()リターン「myurl.com」とecho JUri::base(true)リターンは何も
Therk

8

$this->baseurl;代わりに呼び出す、テンプレート内から使用するショートカットであるJURI:base();JURIクラスの、方法。それはコアの一部であり、あなたはそれを見つけることができます/libraries/joomla/environment/uri.php (~line 218).

メソッドを見ると、構成ファイルをチェックして$live_url変数が定義されているかどうかを確認できます。はいの場合、このURLを返します。それ以外の場合は、他の多くのチェックを経て、実際のベースURIを返します。

ほとんどの場合、末尾にconfiguration.phpを含むlive_url変数が定義されていますindex.php。確認してください...

別の可能性は、現在のテンプレート/テンプレートシステムが$this->baseurlプロパティをどこかで定義していることです。次のように、テンプレート$this->baseurlindex.phpファイルの上部でテンプレートを再定義することにより、テンプレート内を簡単にオーバーライドできます。$this->baseurl = JURI::base();

*更新:

  • 方法を見つけることができる場所について述べましたが、これはそこに行ってコアを変更する必要があるという意味ではありません。これは情報提供のみを目的としています。

更新2-将来の参照用

この投稿で提供された情報を完成させるために、はブールデータ型であるJURI::base($pathonly boolean)1つの引数を取ります-$pathonlyfalseデフォルトです。

を使用$pathonly = trueすると、サイトへのパスのみが返されます。

例:

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

$ pathonly = trueの場合、URIパスの末尾のスラッシュは省略されることに注意してください。


あなたの答えをありがとう、私は方法を見つけました。そこで何かを変更することを避けるべきですか?configuration.phpファイルで、変数live_siteを自分のURLとして定義し、それ以上何も定義しませんでした(index.phpはどこにも追加しませんでした)。
Therk

はい、コアで変更するものはありません。唯一の例外は、他の誰かが以前に何かを既に行っていた場合です...関数がこのように動作する原因になりました。configでlive_url変数を本当に定義する必要がありますか?通常は必要ありません。
FFrewin

わかりました:) live_url変数を定義してもかまいません。何も変わりません... index.phpは常にアップしています。コードを使用して問題を修正することはできますが、これは非常にハック的で非常にいため、これを行いたくありません。だから、index.phpが含まれていないbaseurlを修正したい。
Therk

別の簡単な方法は、テンプレート内でカスタムbaseurl変数を定義し、これを使用することです。$ mybaseurl = JURI:base(true); echo $ mybaseurl;
FFrewin

そして、もう1つ確認できることは、テンプレートの変更が$ this-> baseurlに影響するかどうかです。
FFrewin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.