私は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>';
?>
ガントリーでは、スタイルごとに異なるロゴを使用できます。しかし、これでは別のリンクを使用できません。
私が想定していることを実現するためのさまざまなアプローチが考えられますが、メニューアイテムにテンプレートスタイルを割り当てる方法に関する質問に直接回答するには、次のようなものを使用できます。
_$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');
を介してそれにアクセスできます。
これは単なるアイデアであり、コーディングの問題に直接対応しないことはわかっていますが、テンプレートごとに個別のモジュールを作成するために NoNumbers Advanced Module Manager を使用するとどうなるでしょうか。
次に、その特定のモジュールを対応するテンプレートに割り当てることができますか? AMM管理設定領域を介して。
これは、テンプレートごとに異なるモジュール(URLなど)を作成する必要があることを意味しますが、各モジュールを複製するだけでよいので、それほど手間がかかりません。
誰かが興味を持っている場合、これはすべてを組み合わせる方法です:
ファイル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が空かどうかを確認するだけです。空の場合、デフォルトのホームリンクが使用され、空でない場合、指定されたリンクが使用されます。