学習では、storyというカスタムコンテンツタイプと、story_categoryというカスタム分類法を作成しました。ストーリーでは、story_categoryの用語参照があります。
ノードに関連付けられた分類用語をレンダリングできますが、カスタム分類フィールドではなく、URLエイリアスへのリンクとして自動的にレンダリングされます。
リンクなしで分類用語を表示するにはどうすればよいですか?
私の現在の結果は次のとおりです。
これらは、Storyコンテンツのフィールドです。
これらはStory Categoryボキャブラリのフィールドです。
これは私のページ--front.tpl.phpテンプレートです。
<main>
<div class="container">
<div class="row">
<div class="col-sm-8">
<?php // ------ impactful stories ------ // ?>
<?php
$impactfulStoriesQuery = new EntityFieldQuery();
$impactfulStoriesQuery
->entityCondition( 'entity_type', 'node' )
->entityCondition( 'bundle', 'story' )
->propertyCondition( 'status', 1 )
->fieldCondition( 'field_impactful_story', 'value', 1, '=')
->propertyOrderBy( 'created', 'DESC' )
->range( 0, 2 );
$impactfulStoriesQueryResults = $impactfulStoriesQuery->execute();
if ( isset( $impactfulStoriesQueryResults[ 'node' ] ) ) {
$impactfulStoriesNodeIDs = array_keys( $impactfulStoriesQueryResults[ 'node' ] );
$impactfulStoriesNodes = node_load_multiple( $impactfulStoriesNodeIDs );
$impactfulStories = node_view_multiple( $impactfulStoriesNodes, 'full' );
print render( $impactfulStories );
}
?>
<?php // ------ end impactful stories ------ // ?>
</div>
<div class="col-sm-4">
<p>Some other content</p>
</div>
</div>
</div>
</main>
これは私のnode--story.tpl.phpテンプレートです。
<article class="story u-clearfix">
<img class="story-image u-floatLeft" src="http://lorempixel.com/image_output/people-q-c-200-200-4.jpg" alt="">
<div class="u-floatRight">
<h3 class="story-title">
<?php print render( $title ); ?>
</h3>
<p class="story-summary">
<?php if ( $impactfulStorySummary ): ?>
<?php print render( $impactfulStorySummary ); ?>
<?php endif; ?>
</p>
<div class="story-meta u-clearfix">
<?php if ( $impactfulStoryCategory ): ?>
<?php if ( $impactfulStoryCategoryLink ): ?>
<a class="u-floatLeft" href="<?php print render ( $impactfulStoryCategoryLink ); ?>">
<?php print render ( $impactfulStoryCategory ); ?>
</a>
<?php endif; ?>
<?php endif; ?>
<?php if ( $impactfulStoryRelatedFund ): ?>
<a class="u-floatRight" href="https://www.giveto.osu.edu/makeagift/?fund=<?php print render( $impactfulStoryRelatedFund ); ?>">
Give
</a>
<?php endif; ?>
</div>
</div>
</article>
これは私のテーマのtemplate.phpファイルです。
<?php
function osu_preprocess_node( &$variables ) {
// ------ preprocess impactful story nodes ------ //
if ( $variables[ 'node' ]->type == 'story' ) {
// get summary for the story content type
$summaryItem = field_get_items( 'node', $variables[ 'node' ], 'field_summary' );
$summaryView = field_view_value( 'node', $variables[ 'node' ], 'field_summary', $summaryItem[ 0 ] );
$variables[ 'impactfulStorySummary' ] = $summaryView;
// get the taxonomy term associated with a particular story
$categoryItem = field_get_items( 'node', $variables[ 'node' ], 'field_term_reference' );
$categoryView = field_view_value( 'node', $variables[ 'node' ], 'field_term_reference', $categoryItem[ 0 ] );
$variables[ 'impactfulStoryCategory' ] = $categoryView;
// get the term id so we can get term.
// once we have the term when can get a field of that term
$categoryID = $categoryItem[ 0 ][ 'tid' ];
$category = taxonomy_term_load( $categoryID );
$categoryLinkItem = field_get_items( 'taxonomy_term', $category, 'field_story_category_link' );
$categoryLinkView = field_view_value( 'taxonomy_term', $category, 'field_story_category_link', $categoryLinkItem[ 0 ] );
$variables[ 'impactfulStoryCategoryLink' ] = $categoryLinkView;
// get the related fund field associated with a story
$item = field_get_items( 'node', $variables[ 'node' ], 'field_related_fund' );
$view = field_view_value( 'node', $variables[ 'node' ], 'field_related_fund', $item[ 0 ] );
$variables[ 'impactfulStoryRelatedFund' ] = $view;
}
// ------ end preprocess impactful story nodes ------ //
}
?>
すべての複雑なPHPロジックをプリプロセス関数内に配置することにより、テンプレートファイルを整理してシンプルに保つことがベストプラクティスと見なされています。これにより、コードを再検討するときに満足できるでしょう。hook_preprocess_page()
を使用して、EntityFieldQueryの結果を新しい変数としてページに渡します(front.tpl.php)。
template_preprocess_taxonomy_term()
;を使用して用語を前処理してください。それが失敗した場合、 template_preprocess_field()
を使用して用語を表示するために使用しているフィールドを前処理できます。
用語をテキストとして表示するだけの場合は、コンテンツタイプを管理するときに[表示の管理]タブにアクセスし、リンクの書式設定をプレーンテキストに変更できます。