web-dev-qa-db-ja.com

現在のテンプレートスタイルを検出

私は1つのテンプレートといくつかのスタイルでウェブサイトを構築しています。各スタイルに独自のロゴと、ロゴのカスタマイズされたリンクを設定する必要があります。テンプレートはガントリフレームワークに基づいています。

現在のテンプレートスタイル(名前またはID)を検出し、if-else index.phpファイルのステートメント?これは大体私がやろうとしていることです:

<?php
  if (styleid = "1") {
    $link = "/";
    $logo = "logo1.jpg";
  } elseif (styleid = "2" {
    $link = "/otherlink";
    $logo = "logo2.jpg";
  }
  echo '<a href="'.$link.'"><img src="/images/'.$logo.'"></a>';
?>
2
johanpw

ガントリーでは、スタイルごとに異なるロゴを使用できます。しかし、これでは別のリンクを使用できません。

私が想定していることを実現するためのさまざまなアプローチが考えられますが、メニューアイテムにテンプレートスタイルを割り当てる方法に関する質問に直接回答するには、次のようなものを使用できます。

テンプレートスタイルの取得:

_$styleId = JMenu::getInstance('site')->getActive()->template_style_id;
_

これは、アクティブなメニューで割り当てられたスタイルのIDを返します。デフォルトのスタイルは0を返すことに注意してください。

私はこれをガントリーテンプレートでテストしましたが、動作するようです。


第二のアプローチ

Gantry Frameworkを使用してカスタムテンプレートを作成すると、ロゴのカスタムリンク用に、テンプレート管理に追加の設定(ロゴ機能を拡張するカスタム要素フィールド)を追加できます。

だからあなたがする必要があるのは、template_options.xmlファイルに追加のフィールドを追加し、この値をテンプレートのインデックスで取得して、それをリンクに変換することです。メニュー項目フィールド、またはメニュー項目リンクを照会するデータベースフィールドを使用すると、ユーザーが別のメニュー項目への内部サイトリンクを選択しやすくなります。

問題に関するコメント:

2番目のアプローチをテストし、templateOptions.xmlに次のようにカスタムフィールドを作成しました:features/logo.phpの値を使用しようとすると、空になります:$ customlink = $ gantry-> get( 'customlogo') ; ($ customlinkにはデータが含まれていません)。何か案は?

回答:

templateOptions.xmlには、ロゴ機能用の次のコードがあります。

_<fields name="logo" type="selectedset" label="LOGO" description="LOGO_DESC">
    <field name="enabled" type="toggle" default="1" label="SHOW" />
    <field name="position" type="position" translation="false" default="header-a" label="POSITION" />
    <field name="type" type="selectbox" selector="true" default="gantry" label="TYPE" isbodyclass="true" setbyurl="true" setinsession="true" setbysession="true" setincookie="true" setbycookie="true"/>
    <fields type="set" name="gantry" label="Gantry Template">
    </fields>
    <fields type="set" name="custom" label="CUSTOM">
        <field name="image" type="imagepicker" default="" label="LOGO_PICKER" description="LOGO_PICKER_DESC" setinsession="true" setbysession="true" setincookie="true" setbycookie="true" />
    </fields>
</fields>
_

おそらく、より深い_<fields - groups>_内にカスタムフィールドを追加しましたか?

この方法でカスタムフィールドを追加すると、feature.phpで$this->get('fieldname')を使用してアクセスできないことに気づきました。

したがって、以下のようなカスタムフィールドを追加する必要があります:

_<fields name="logo" type="selectedset" label="LOGO" description="LOGO_DESC">
    <field name="enabled" type="toggle" default="1" label="SHOW" />
    <field name="position" type="position" translation="false" default="header-a" label="POSITION" />
    <field name="type" type="selectbox" selector="true" default="gantry" label="TYPE" isbodyclass="true" setbyurl="true" setinsession="true" setbysession="true" setincookie="true" setbycookie="true"/>
    <fields type="set" name="gantry" label="Gantry Template">
    </fields>
    <fields type="set" name="custom" label="CUSTOM">
        <field name="image" type="imagepicker" default="" label="LOGO_PICKER" description="LOGO_PICKER_DESC" setinsession="true" setbysession="true" setincookie="true" setbycookie="true" />
    </fields>
    <field name="mylogolink" type="text" default="" label="logo link" description="logo link" />
</fields>
_

そうすれば、おそらく$this->get('mylogolink');を介してそれにアクセスできます。

1
FFrewin

これは単なるアイデアであり、コーディングの問題に直接対応しないことはわかっていますが、テンプレートごとに個別のモジュールを作成するために NoNumbers Advanced Module Manager を使用するとどうなるでしょうか。

次に、その特定のモジュールを対応するテンプレートに割り当てることができますか? AMM管理設定領域を介して。

これは、テンプレートごとに異なるモジュール(URLなど)を作成する必要があることを意味しますが、各モジュールを複製するだけでよいので、それほど手間がかかりません。

2
jonboy

誰かが興味を持っている場合、これはすべてを組み合わせる方法です:

ファイルtemplateOptions.xml私はこのコードを追加しました(FFrewinの提案に従います):

<field name="mylogolink" type="text" default="" label="logo link" description="logo link" />

次に/features/logo.php、これを置き換えます:

<div class="rt-logo-block">
    <a href="<?php echo $gantry->baseUrl; ?>" id="rt-logo"></a>
</div>

これとともに:

<div class="rt-logo-block">
   <a href="<?php echo ($customlink != "" ? $this->get('mylogolink') : $gantry->baseUrl;) ?>" id="rt-logo"></a>
</div>

$ customlinkが空かどうかを確認するだけです。空の場合、デフォルトのホームリンクが使用され、空でない場合、指定されたリンクが使用されます。

1
johanpw