Concrete5 - 如何获得 page_list 编辑屏幕以读取自定义字段中的值
Concrete5 - how to get page_list edit screen to read values in custom fields
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
我们已将选择字段添加到块编辑屏幕,如下所示:
<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;
当我们输出标记时,这显然会从数据库中提取数据以供使用。
除了我们重新编辑块之外,一切都很好 - 基本上之前为我们的自定义字段设置的值不会被读取,并且下拉列表会恢复到 select 列表中的第一个项目.
5。问题
我们如何获得 page_list 编辑屏幕以读取先前在数据库中设置的值?
任何正确方向的指示将不胜感激(抱歉,无法弄清楚如何使语法突出显示工作 - 希望降价是相同的广告 Github 问题)。
干杯
本
你的问题是你在你的编辑视图中覆盖了变量 $gridSize = array(...)
就在你试图访问它们之前,你可能可以通过将这些数组变量名称更改为语义来修复它"grid_size_options".
如果这不起作用,您可以使用 $this->set
将变量从控制器 edit
方法传递到视图。您的编辑方法看起来像这样:
public function edit()
{
$this->set('grid_size', $this->gridSize);
$this->set('grid_padding_style', $this->gridPaddingStyle);
}
然后您的编辑视图就可以神奇地访问 $grid_size
和 $grid_padding_style
。
<select name="gridPaddingStyle" id="selectPaddingSize">
<?php
foreach ($gridPaddingStyle as $gridPaddingStyleItem => $value) {
?>
<option value="<?= $value ?>" <?= $grid_padding_style == $value ? 'selected' : '' ?> >
<?= $gridPaddingStyleItem ?>
</option>
<?php
}
?>
</select>
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
我们已将选择字段添加到块编辑屏幕,如下所示:
<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;
当我们输出标记时,这显然会从数据库中提取数据以供使用。
除了我们重新编辑块之外,一切都很好 - 基本上之前为我们的自定义字段设置的值不会被读取,并且下拉列表会恢复到 select 列表中的第一个项目.
5。问题
我们如何获得 page_list 编辑屏幕以读取先前在数据库中设置的值?
任何正确方向的指示将不胜感激(抱歉,无法弄清楚如何使语法突出显示工作 - 希望降价是相同的广告 Github 问题)。
干杯
本
你的问题是你在你的编辑视图中覆盖了变量 $gridSize = array(...)
就在你试图访问它们之前,你可能可以通过将这些数组变量名称更改为语义来修复它"grid_size_options".
如果这不起作用,您可以使用 $this->set
将变量从控制器 edit
方法传递到视图。您的编辑方法看起来像这样:
public function edit()
{
$this->set('grid_size', $this->gridSize);
$this->set('grid_padding_style', $this->gridPaddingStyle);
}
然后您的编辑视图就可以神奇地访问 $grid_size
和 $grid_padding_style
。
<select name="gridPaddingStyle" id="selectPaddingSize">
<?php
foreach ($gridPaddingStyle as $gridPaddingStyleItem => $value) {
?>
<option value="<?= $value ?>" <?= $grid_padding_style == $value ? 'selected' : '' ?> >
<?= $gridPaddingStyleItem ?>
</option>
<?php
}
?>
</select>