私は現在、Drupal 7.でビューと前処理を学習するための自己設定タスクに取り組んでいます。画像のリストを作成するフォーマットされていないビューを作成しました(コンテンツにリンクされています) -typeですが、ビュー内のフィールドをnode:typeに置き換えると、ノードページへのリンクが表示されますが、それが目的ではありません)、それらをブロックに配置します。ブロックをハイライトに配置しましたリージョンを作成し、views-view-fields--image.tpl.phpファイルを記述して、リストをさまざまな順序なしリスト形式に出力します。これは、jCarouselまたはfeatureList jQueryプラグインによって変換されます。
これに加えて、ページを作成しました--front.tpl.phpファイルをフロントページのスタイルを変更し、CSS、js、HTMLが正しく機能し、カルーセルとリストが表示され、定義されたブロック。
ただし、フロントページをビューが表示されないはずの別のページに残すと、次のエラーが発生します。
通知:未定義のプロパティ:iaintest_preprocess_views_view_fields()のstdClass :: $ _ field_data(/Applications/XAMPP/xamppfiles/htdocs/drupal/sites/all/themes/iaintest/template.phpの行10)。
ビューが出力するリストを前処理するために、次の前処理コードを記述しました。
_function iaintest_preprocess_views_view_fields (&$variables) {
if (!$variables['view']->result[0]->_field_data) {
// Line 10 where the error occurs.
}
else {
drupal_add_css(path_to_theme() . '/jcarousel/skins/tango/skin.css');
drupal_add_css(path_to_theme() . '/featureList.css');
$js = "
jQuery.noConflict();
jQuery(document).ready(function(){
jQuery('#mycarousel').jcarousel();
jQuery.featureList(
jQuery('#tabs li a'),
jQuery('#output li'), {
start_item: 1
}
);
});";
drupal_add_js($js, 'inline');
$items = array();
foreach ($variables['view']->result as $key => $vars) {
foreach ($variables['view']->result[0]->_field_data['nid']['entity']->field_images['und'] as $k => $v) {
$variables['carousel'][] = array(
'uri' => $v['uri'],
'alt' => $v['alt'],
'title' => $v['title']
);
}
}
}
}
_
drupal_is_front_page()
または_$variable['is_front'] === TRUE
_を使用して、前処理のこの部分を、元のビューが表示される唯一の場所であるフロントページに制限しようとしました。
これはまったく可能ですか、何か誤解していますか?
試してください:
<?php
if (isset($variables['view']->result[0]->_field_data)) {
//
?>
あなたの奇妙なif/else構成の代わりに。そのコードで何を達成しようとしているのか本当にわからないので、コードを実行するかどうかを確認するより良い方法があるかもしれません。
あなたが経験していることの要約を作成するには:
何が起こるか:
drupal_set_message()
エラーメッセージをセッション変数に保存します。つまり、エラーはフロントページに対して呼び出された関数によって引き起こされますが、エラーメッセージは出力される次のページに表示されます。
PHPでエラーが発生した場合にどうなるかを詳しく説明するには、Drupalを起動するために呼び出される関数 drupal_bootstrap() が _ drupal_bootstrap_configuration())を呼び出します 、これは _ drupal_error_handler() を次のように設定しますPHPエラーハンドラ。_drupal_error_handler()
呼び出し _ drupal_error_handler_real() 、次に _ drupal_log_error() を呼び出します。この関数はdrupal_set_message()
を呼び出します。