Concrete5 - 将数组保存到DB

时间:2014-01-20 23:52:16

标签: javascript jquery content-management-system concrete5 concrete

我创建了一个块,您可以动态添加多个名称。当我cick save,并返回到块编辑时,我没有看到我的新添加的名称。我认为这是保存到数据库的问题。请有人帮帮我吗?

这是我的代码:

Controller.php这样:

<?php  defined('C5_EXECUTE') or die("Access Denied.");

Loader::block('library_file');

class MultipleBlockController extends BlockController {
    protected $btName = 'Multiply TEST';
    protected $btDescription = 'Multiple add. TEST';
    protected $btTable = 'btDCMultiple';

    protected $btInterfaceWidth = "700";
    protected $btInterfaceHeight = "450";
}

db.xml:

<?xml version="1.0"?>
<schema version="0.3">
    <table name="btDCMultiple">

        <field name="bID" type="I">

            <key />
            <unsigned />

        </field>

        <field name="inputs" type="C" size="16"></field>

    </table>
</schema>

edit.php:

<?php  defined('C5_EXECUTE') or die("Access Denied.");

?>

<?php
$remove_row_icon = '<img src="'.ASSETS_URL_IMAGES.'/icons/remove_minus.png" class="remove_row" height="14" width="14" >';
$add_row_icon  = '<img src="'.ASSETS_URL_IMAGES.'/icons/add_small.png" class="add_row" height="14" width="14" >';
?>

<!-- Zakladki -->
<ul id="ccm-autonav-tabs" class="ccm-dialog-tabs">
    <li class="ccm-nav-active"><a id="ccm-autonav-tab-add" href="javascript:void(0);"><?php   echo t('Edit')?></a></li>
</ul>
<!-- Odstep konfiguracja -->
<div style="padding: 10px">

    <div class="ccm-autonavPane" id="ccm-autonavPane-add">

        <h2>debug</h2>

        <table>
        <tr><td><?php echo 'Name';?></td><td></td></tr>
        <?php

            foreach($inputs as $a_name) { ?>
            <tr>
            <td><input type="text" size="10"  name="inputs"   value="<?php  echo $a_name ?>" ></td>
            <td><?php echo $add_row_icon; echo (' '); echo $remove_row_icon;?></td>
            </tr>  
    <?php   }   ?>
</table>
    </div>

</div>

<script type="text/javascript">
$(document).ready(function(){
  $('.add_row').live('click',function(){
    var copy_of_row = $(this).closest('tr').clone();
    $(copy_of_row).find('input').val('');
    $(this).closest('tr').after(copy_of_row);
  });

  $('.remove_row').live('click',function(){
    $(this).closest('tr').remove();
  });

});
</script>

view.php:

<?php  defined('C5_EXECUTE') or die("Access Denied.");

?>

<div>

    <?php echo $inputs ?>

</div>

另一个问题:如何从数据库加载数组?

1 个答案:

答案 0 :(得分:0)

您的代码中有几个问题:

  1. 如果您的字段输入将重复,则需要添加 括号[]到它的名字,所以它变成name="inpust[]"

  2. 在数据库表中,字段bID包含块ID,它是一个键     字段意味着数据库中只有一行可以具有该值。在你的     例如,如果您有3个输入,则将有3行具有相同的bID     这是不可能的。

  3. 我建议您查看核心幻灯片块,以获取使用2个单独表格为一个块保存多个值的示例。

    关于您的其他问题,一旦加载数据库助手,您就可以

    $rows = $db->getArray($sql,$vals); 
    

    $ rows将包含您的值数组,$ sql是您的sql调用(SELECT * FROM whatever_table ...),$ vals(可选)包含要在sql中使用的过滤值。