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

时间:2015-04-22 02:03:52

标签: concrete5

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相同)。

干杯

1 个答案:

答案 0 :(得分:2)

你的问题在于,在尝试访问它们之前,你正在编辑视图$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>