0

Я создал блок, который вы можете добавить в него динамически несколько имен. Когда я чичу сохранить и вернусь к редактированию блока, я не вижу новых добавленных имен. Я думаю, что это проблема с сохранением базы данных. Пожалуйста, кто-нибудь может мне помочь?Concrete5 - Сохранить массив в DB

Вот мой код:

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> 

Другой вопрос: как загрузить массив из БД?

ответ

0

У вас есть несколько проблем в вашем коде:

  1. если ваши входы поля будет повторяться, нужно добавить скобки [], чтобы ее имя, так что становится name="inpust[]"

  2. В ваша таблица базы данных, поле bID содержит идентификатор блока, а это поле ключа , означающее, что только одна строка в вашем db может иметь это значение. В вашем случае , если у вас 3 входа, у вас будет 3 строки с одинаковым идентификатором , что невозможно.

Предлагаю вам взглянуть на блок слайд-слайда ядра для примера сохранения нескольких значений для одного блока с помощью 2 отдельных таблиц.

Что касается другого вопроса, как только вы загрузите помощник базы данных вы можете сделать

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

Где $ строк будет содержать массив значений, $ SQL Ваш SQL вызов (SELECT * FROM whatever_table ...) и $ vals (необязательно) содержит значения фильтрации для использования в вашем sql.