モジュールをインストールせずに(つまり、template.phpにのみ)、分類ページのノードの出力を抑制する方法はありますか?
分類用語でタグ付けされたノードは、「分類インデックスページ」(例:yoursite.com/taxonomy/term/[id])に表示されます。
Drupal 7の新機能)には、分類インデックスページにフィールドをアタッチできます。ただし、ビューを使用して分類ページを上書きしようとすると(たとえば、ノードの表示方法を制御するため)、 、分類インデックスページのフィールドは表示されません。
したがって、Taxonomy ViewページをTaxonomy Indexページのブロックとして配置しました。このようにして、ノードの表示方法を制御し、分類インデックスページのフィールドを引き続き使用できます。
このため、分類ページはまだノードを出力しています。ノードのティーザーを非表示に設定することで非表示にできますが、それでもノードがロードされます(したがって、ノードが表示されていなくても、ノードに接続されているCSS/Jqueryが読み込まれます)。ノードが表示されないようにするには、理想的にはtemplate.php内からノードを抑制できますか?
モジュールなしのソリューションが必要だったのはわかっていますが、Drupal 7には、必要な機能を正確に実行するモジュールがあります。 Disable Term Node Listings
用語リストの出力を無効にする場合は、語彙ごとに選択できます。
http://www.wardontheweb.com/remove-node-lists-from-taxonomy-pages-in-drupal-7/ からの解決策は私にとってうまくいきます:
function THEMENAME_preprocess_page(&$vars){
if (arg(0) == 'taxonomy' && arg(1) == 'term' && is_numeric(arg(2))){
unset($vars['page']['content']['system_main']['nodes']);
unset($vars['page']['content']['system_main']['pager']);
unset($vars['page']['content']['system_main']['no_content']);
}
}
注:サイトのキャッシュをリセットする必要があります。
$ page変数からノードを削除する必要があります。
template.phpでは、次のように実行できます。
_function MY_THEME_preprocess_page(&$variables) {
if(arg(0) == "taxonomy" && arg(1) == "term") {
$variables['page']['content']['system_main']['nodes'] = null;
}
}
_
あなたのpage.tpl.phpでこのコードを使用してください:
_if(arg(0) == "taxonomy" && arg(1) == "term"){
$page['content']['system_main']['nodes'] = null;
}
_
これにより、ノードがすべての語彙と用語から削除されます。語彙から特定の用語のみまたはすべての用語でそれらを削除する場合は、tid
を含むarg(2)
を使用して用語をロードし、ifステートメントを更新します。
CSSを使用して分類法を非表示にしていましたが、表示をカスタムに設定し、より良いオプションのように非表示にしています。
Template.phpでは実質的に何でもできますが、それはお勧めできません。 CMSを使用するポイントは、データ、動作、および外観を分離することです。 template.phpファイルはテーマレイヤーの一部であり、サイトの視覚スタイルを調整するために使用する必要があります。
サイトの動作を調整する場合(この場合は、特定のリストに表示される項目を制御します)、動作を変更する必要があるため、モジュールをインストールして構成します。コンテンツのカスタムリストを作成する場合は、 Views モジュールがまさに必要です。
あなたの場合(私が正しく理解している場合)、分類用語のフィールドがその用語でタグ付けされたノードのリストの上に表示されるようにする必要があります。 URLから用語IDを取得し、必要な情報を表示するビューブロックを作成することにより、ビューでそれを再作成できます。