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

Concrete5 - how to get page_list edit screen to read values in custom fields

1。设置

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


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>