具体5-如何获取page_list编辑屏幕以读取自定义字段中的值



1。设置

我们通过覆盖在page_list块的编辑屏幕上添加了两个布局下拉字段:

  • db.xml
  • page_list_form.php
  • 将字段添加到视图

2.在db.xml中,我们添加了:

<field name="gridSize" type="C" size="255">
</field>
<field name="gridPaddingStyle" type="C" size="255">
</field>

3.在page_list_form.php中

我们已经将slect字段添加到块编辑屏幕中,如下所示:

<div class="ccm-block-field-group">
<h2><? echo t('Grid layout')?></h2>
<p><? echo t('Grid size')?></p>
<?php
$gridSize = array(
'1up' => 'grid-list-item-single grid-unit-1',
'2up' => 'grid-unit-2',
'3up' => 'grid-unit-3',
'4up' => 'grid-unit-4',
'5up' => 'grid-unit-5',
'6up' => 'grid-unit-6'
);
if (is_array($gridSize)) :
?>
<select name="gridSize" id="selectGridSize">
<? foreach ($gridSize as $gridItem => $value) : ?>
<option value="<?= $value ?>" <?php if ($gridSize == $value) { ?> selected <?php } ?>>
<?= $gridItem ?>
</option>
<? endforeach; ?>
</select>
<? endif; ?>
<p><? echo t('Grid padding style')?></p>
<?php
$gridPaddingStyle = array(
'Padding' => '',
'No padding' => 'grid-no-padding',
'Hairline' => 'grid-hairline'
);
if (is_array($gridPaddingStyle)) :
?>
<select name="gridPaddingStyle" id="selectPaddingSize">
<? foreach ($gridPaddingStyle as $gridPaddingStyleItem => $value) : ?>
<option value="<?= $value ?>" <?php if ($gridPaddingStyle == $value) { ?> selected <?php } ?>>
<?= $gridPaddingStyleItem ?>
</option>
<? endforeach; ?>
</select>
<? endif; ?>
</div>

4.在view.php中,我们添加了:

$gridSize = $controller->gridSize;
$gridPadding = $controller->gridPaddingStyle;

这显然将数据从数据库中提取出来,以便在我们输出标记时使用。


除了重新编辑块之外,一切都很好——基本上,之前为自定义字段设置的值不会被读取,下拉菜单会返回到选择列表中的第一个项目。


5.问题

我们如何让page_list编辑屏幕读取之前在数据库中设置的值?


如果有任何指向正确方向的指针,我们将不胜感激(对不起,我不知道如何让语法高亮显示工作——希望降价与Github问题相同)。

干杯

Ben

您的问题是,在尝试访问编辑视图$gridSize = array(...)中的变量之前,您正在覆盖这些变量,您可以通过将这些数组变量名称更改为类似于"grid_size_options"的语义来解决此问题。

如果不起作用,可以使用$this->set从控制器edit方法将变量传递到视图。你的编辑方法看起来像这样:

public function edit()
{
$this->set('grid_size', $this->gridSize);
$this->set('grid_padding_style', $this->gridPaddingStyle);
}

然后您的编辑视图就可以神奇地访问CCD_ 4和CCD_。

<select name="gridPaddingStyle" id="selectPaddingSize">
<?php 
foreach ($gridPaddingStyle as $gridPaddingStyleItem => $value) {
?>
<option value="<?= $value ?>" <?= $grid_padding_style == $value ? 'selected' : '' ?> >
<?= $gridPaddingStyleItem ?>
</option>
<?php
}
?>
</select>

最新更新