「カスタムテキスト」フィールドを含むビューを作成し、このフィールドをプログラムでDrupal 8。
私が持っています:
$view = Views::getView('my_view');
$view->execute();
foreach($view->result as $row){
$node = Node::load($row->nid);
// Get here the view custom field with label "An example view field".
}
$ rowフィールドにはフィールドも$ nodeもありません。
私は今持っています:
$customField = $view->field['nothing'];
customFieldは、Drupal\views\Plugin\views\field\Customのインスタンスです。
dpm($customField->render($row));
これは、クラスDrupal\views\Render\ViewsRenderPipelineMarkupと同じマークアップを持つProtectecd文字列を返します:{{ title }} test
。
おかげで、
次のようなものが必要です
//already loaded
$node = $row->_entity;
プロパティを簡単に取得する最良の方法は、おそらくxdebugで変数を検査することです
ヘッダー/フッターの王の場合、次のようにしてレンダリングされた配列を取得できます。
$view = \Drupal\views\Views::getView('Your view');
$view->execute();
/* @var $area \Drupal\views\Plugin\views\area\Text */
$area = reset($view->header); // $view->header['area'] or something else
$rendered = $area->render(); // rendered array
OK、それから:
$view = \Drupal\views\Views::getView('YOUR VIEW');
$view->execute('YOUR DISPLAY ID OR DEFAULT');
$nothing = $view->getHandler('YOUR DISPLAY ID OR DEFAULT','field', 'nothing');
$text = $nothing['alter']['text'];
devel モジュールをインストールしてください
/ drupal8/devel/phpに移動します
あなたが試すことができます:
$view = \Drupal\views\Views::getView('my_view');
$view->execute();
foreach($view->result as $row){
dpm($row->_entity->get('Custom text')->getValue());
}
注:フィールドのマシン名で「カスタムテキスト」を変更
結果が次のようになる場合:
Array
(
[0] => Array
(
[value] => 43
)
)
あなたはフィールドにアクセスできます
$row->_entity->get('Custom text')->value
結果が次のようになる場合:
Array
(
[0] => Array
(
[target_id] => 1
)
)
あなたはフィールドにアクセスできます
$row->_entity->get('Custom text')->target_id
私にも同様の問題があり、私のために働く唯一の方法は次のとおりでした:
function MODULENAME_preprocess_views_view_fields(&$vars) {
$view = $vars['view'];
if(isset($view) && $view->id() === 'test') {
foreach ($view->field as $id => $field) {
// change the global custom text content for a specific
// result row.
if ($vars['row']->nid == 149) {
$vars['fields']['nothing']->content = 'some new text';
}
}
}
}
これは私が持っているものですが、これを行うにはもっと良い方法があるはずだと思います。
いくつかのメモ:
コード:
// The machine name of your view.
$viewname = 'name_of_the_view';
// Get the view.
$view = \Drupal\views\Views::getView($viewname);
// Display machine name.
$view->setDisplay('default');
// Execute the view.
$view->preExecute();
$view->execute();
$view->render();
foreach(array_keys($view->result) as $row_index){
$custom_field = str_replace("\n", '', $view->field['nothing']->tokenizeValue((string)$view->field['nothing']->original_value, $row_index));
}