特定の記事のみテンプレートを変更する方法はありますか? 記事をメニューにリンクしなくても機能することに注意してください。
4 に答える
テンプレートのオーバーライドがメニューの位置に依存しないようにする場合は、別のテンプレートをメニューに割り当てる標準の joomla の方法は機能しません。手を汚してカスタムコードを書く必要があります。テンプレート切り替えのトリガーとして article_id を使用する必要があります。
私は仕事でそのようなことをしましたが、これがどのように達成されたかを正確に覚えていません。コードが見つかり次第、ここに投稿します。
編集:コードが見つかりました:)
/includes/application.php ファイル、具体的には getTemplate() メソッドを編集する必要があります。このメソッドの最後で、直前に:
// Fallback template
if (!file_exists(JPATH_THEMES.DS.$template.DS.'index.php')) {
$template = 'rhuk_milkyway';
}
次のように、カスタム テンプレートを適用するための条件を追加できます。
//CUSTOM TEMPLATE FOR THE ARTICLE 13
if (JRequest::getVar('id')=='13' && JRequest::getVar('option')=='com_content') {
$template = $custom_template_name;
}
これにより、$custom_template_name 内にある名前のカスタム テンプレートが id=13 の記事に適用されます。simplecaddy で行ったように、別のテンプレートをコンポーネントに適用するためにも使用できます。
//TEMPLATE FOR SIMPLECADDY
if (JRequest::getVar('option')=='com_caddy'){
$template = 'shop';
}
回避できる場合は、テンプレートに何かをハードコーディングしないようにする必要があります。メニューから記事がリンクされないように指定する理由がわかりません。記述やコーディングを行わずにこれを実現する最も簡単な方法は、新しいメニューを作成してから、テンプレートを指定する記事にリンクするメニュー項目を追加することです。メニューをモジュールのどこかに配置する必要がないため、サイトに表示されることはありませんが、テンプレートマネージャーのメニュー割り当てには表示されます。
これは、単一の記事、カテゴリ、セクション、またはコンポーネントで行うことができます。テンプレートを関連付けるメニューリンクがある限り。私は常に、サイトの運営に必要なリンクを配置するための管理者専用メニューを作成していますが、ユーザーがアクセスする必要はありません。
これは古い投稿ですが、私の考えを共有したいと思います: onAfterInitialize() 関数をシステム プラグインに実装することで、単一の記事のテンプレートを簡単に変更できます。Joomla コアを変更する必要はありません。
これは Joomla 1.5 で機能しますが、2.5 でも機能するはずです。
function onAfterInitialise(){
if(true){ // f.ex. test for article ID or whatever
JRequest::setVar('template', 'beez'); // change template
}
}
joomla 3.x バージョンでは、url-parameters の処理が異なります。以下は joomla 3.4.8 でテストされました。
public function onAfterInitialise()
{
$app=JFactory::getApplication();
if(true){ // f.ex. test for article ID or whatever
$app->input->set('template', 'beez3');
}
}
Joomla のプラグインの作成に関する詳細はこちら
ブレントが言ったように、コア Joomla コードを変更する誘惑を避けてください! これを行うと、Joomla のアップグレードができなくなる可能性があります。
「隠しメニュー項目」テクニック (便利ですが、場合によっては SEF URL を壊す可能性があります) とは別に、便利なツールはChameleonです。これにより、特定の記事/カテゴリ/セクション (さらに、ブラウザーの種類、ユーザー グループ、コンポーネントなど) を選択し、これらを使用して特定のテンプレートをトリガーすることができます。