web-dev-qa-db-ja.com

アクティブなページのエイリアスを取得する正しい方法は何ですか

いくつかのJSをロードしたいのですが、必要なページだけにロードします。

アクティブな記事のエイリアスを使用してそれを特定しようとしています。

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;

<head>のこの部分:

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

動作しないようです。
私が間違っている提案はありますか?

6
BodgeIT

記事のエイリアスについて話している場合は、コンテンツモデルを呼び出すか、データベースから読み取ります。

URLのエイリアスについて話している場合、それを取得するのは簡単ではありません。Joomlaには、エイリアスを生成する方法がたくさんあります。

  • ブログまたはカテゴリリストを介して、記事のエイリアスに基づきます。
  • 直接メニュー項目を介して、それはメニュー項目のエイリアスに基づきます。
  • joomlaは検索を通じて決定します。
  • あなたはSEF拡張を持っていますか?あなた自身のルールを作る

そして、これはエイリアスの最後のセクションです。最初の部分(または「パス」)は、記事に移動するナビゲーションによって異なります。

これがいかに複雑であるかを理解するために、メインストリームのSEF拡張機能は、フロントエンドを呼び出してエイリアスを取得します。バックエンドでエイリアスを生成することが信頼できないことが明らかにわかったためです。

結論:エイリアスを忘れます。

これを回避する方法:$ input = JFactory :: getApplication()-> input;

  • メニュー項目IDを使用:$ input-> get( 'Itemid');
  • コンポーネント/ビュー名を使用:$ input-> get( 'option')。 「。」 。 $ input-> get( 'view');;
  • 記事IDを使用:$ input-> get( 'id'); (ただし、option = com_content&view = articleかどうかを確認してください)

これがあなたの質問に答えることを願っています。

1
Riccardo Zorn

1つの可能性は、レイアウトを少し変更して、より多くのテンプレートコントロールを許可することです。これは、記事のエイリアスの取得とは直接関係ありませんが、別の方法です。

これを行うには、このフィールドを_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>
_

オプションは必要なだけ追加できます。例として2つあります。これにより、テンプレートマネージャーに設定が作成されます。テンプレートマネージャーでテンプレートを開くと、その設定も変更できるはずです。重要なのは、現在のテンプレートをメインのままにして、テンプレートを複製することです(ファイルのみではなく、設定のみを複製します)。この2番目のテンプレートでは、HTMLレイアウトを変更し、「メニューの割り当て」タブを使用して、どのページでそれを使用できるかを指定できます。したがって、記事のエイリアスの場合、記事にメニュー項目が関連付けられている限り(ほとんどの場合、同じエイリアスで)、そのテンプレートを指定されたエイリアス(およびその他すべて)に割り当てるのはかなり簡単です。

したがって、基本的には、特定のページでのみ使用するように指定されたテンプレートがあります。

ただし、これには_index.php_の編集も必要です。

次のコードをファイルの先頭の最初のphpブロック内に追加します。

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

次に、特別なレイアウトに別の何かを指定する必要がある場合は、次の手順を実行します。

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

特定のページにのみjsをロードしたい場合は、jumiを使用してみてください。それは私にとってはおかしい。 http://extensions.joomla.org/extensions/core-enhancements/coding-a-scripts-integration/custom-code-in-content/102

0
Eva Farkasne