web-dev-qa-db-ja.com

ビューブロックのタイトルへのリンクをさらに移動するにはどうすればよいですか?

Drupal 7とビューを使用しています。フロントページに表示するためのブロックと「詳細リンク」を作成しました。

ビューブロックのタイトルの横にある「詳細リンク」を移動するにはどうすればよいですか?

Mockup for the views block output

4
arthitst

views-view.tpl.php をビューモジュールからテーマフォルダにコピーする必要があります。これを特定のビューに対してのみ行う場合は、views-view--your-view.tpl.phpのようにファイル名を変更する必要があります。次に、このテンプレートファイルの好きな場所に「more link」の部分を移動するだけです。

更新:タイトルがブロックによってレンダリングされるという問題について@Mołotが指摘したおかげで、APIページですでにそれについての議論があることがわかりました。回避策として、ブロック構成でタイトルを<none>に設定して、ブロックによってレンダリングされないようにすることができます。また、ビューテンプレートで、タイトルの印刷を担当する次の部分を置き換えます。

<?php if ($title): ?>
  <?php print $title; ?>
<?php endif; ?> 

これとともに:

<?php if (empty($title)): ?>
  <?php $title = check_plain($view->get_title()); ?>
<?php else: ?>
  <?php print $title; ?>
<?php endif; ?>
2
Елин Й.

プロセスが不要な場合は、結果を表示し、下のTL; DRまでスクロールしてください!

ビュー設定ページで、ブロックの表示に移動します。その中でAdvanced列を展開し、下部にあるTheme:Informationをクリックします。次のような画面が表示されます。

Theme Information screen

ここでは、名前の選択を確認できます。 views-view.tpl.phpは、すべてのビューとすべてのディスプレイのデフォルトであるため、オーバーライドする必要はありません。あなたはそれをブロックにしたいので、views-view--block.tpl.phpはすべてのブロックにとって自然な選択です、そしてviews-view-- test--block.tpl.phptestという名前のビューにのみ影響を与える場合。

選択した名前で空のファイルを作成し、[出力を表示]リンクをクリックして、そこに表示されるものをファイルにコピーし、保存して、テーマディレクトリにアップロードします。次に、テンプレートファイルを再スキャンをクリックします。これで、新しいテンプレートが使用され、編集できるようになりました。

問題は、ブロックのタイトルがその中にレンダリングされないことです。一部

_<?php print render($title_prefix); ?>
<?php if ($title): ?>
  <?php print $title; ?>
<?php endif; ?>
<?php print render($title_suffix); ?>
_

タイトルは、テンプレートのblock.tpl.phpによって既にレンダリングされているため、実行されません。おそらく次のようになります。

_<?php print render($title_prefix); ?>
<?php if ($title): ?>
  <h2<?php print $title_attributes; ?>><?php print $title; ?></h2>
<?php endif;?>
<?php print render($title_suffix); ?>
_

似ていますが、block.tpl.phpは_$more_を認識できません。 _global $more_でインポートしようとすると、次の原因が発生します。

通知:未定義の変数:詳細

それで、私たちは何を定義しましたか?の時間

_<?php dpr(get_defined_vars()); ?>
_

悲しいことに、ここでは運がありません。では、テーマにビューのtplをブロックに直接使用させる必要があるのでしょうか。 theme_preprocess_block(&$variables, $hook) に一時的にdpr($variables['block_html_id']);を追加します。今、私は自分のブロックのIDがblock-views-test-block-1であることを確認しているため、フックに次のように追加します。

_if ($variables['block_html_id'] == 'block-views-test-block-1') {
  $variables['theme_hook_suggestions'][] = 'views_view__test__block';
}
_

_-_と___は、候補とファイル名の間で交換されることに注意してください。しかし、それは機能しません-変数がないコンテキストでtplを実行します。今何?もちろん、裸のブロックテンプレートを追加します。

_if ($variables['block_html_id'] == 'block-views-test-block-1') {
  $variables['theme_hook_suggestions'][] = 'block__raw';
}
_

その中に1行だけあります:

_<?php print $content ?>
_

これで、タイトルはメインblock.tpl.phpを使用して印刷されないため、views-view--block.tpl.php次のセクションを移動できます:

$ waitは[〜#〜](〜#〜]でビューのブロックテンプレート内で使用できません。 、しかしタイトル自体はありません。テンプレート提案をロールバックする時間です。

TL; DR

views-view--block.tpl.phpから、_$more_を出力する行を削除します。最初に、以下を追加します。

_global $block_more;
$block_more = $more;
_

メインblock.tpl.phpで、次のように使用します。

_<?php if ($title): ?>
  <h2<?php print $title_attributes; ?>><?php print $title; ?>
  <?php global $block_more; ?>
  <?php if (@$block_more): ?>
    <?php print $block_more; ?>
  <?php endif; ?>
  </h2>
<?php endif;?>
_

残りはCSSの問題です。

2
Mołot

1つの解決策は、ビューのブロックテンプレート(HTMLの内部)と、一般的なビュー(外部)のブロックテンプレートの両方をカスタマイズすることです。したがって、テーマにビューブロックテンプレート ビューブロックのテンプレートファイルを作成する とブロックテンプレートブロック--views.tpl.phpを含めることができます。

したがって、ビューテンプレートを修正して、$ title変数(空白)の代わりに$ view-> get_title()からタイトルをレンダリングし、その後にmoreリンクを配置できます。同時に、ブロックテンプレートを修正して、タイトルがまったく表示されないようにします。

しかし、純粋なCSSソリューションも同様に機能します。

0