Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Циклы для smarty - не могу разобраться.
Форумы портала PHP.SU » » Вопросы новичков » Циклы для smarty - не могу разобраться.

Страниц (1): [1]
 

1. dropoff - 05 Августа, 2011 - 16:24:00 - перейти к сообщению
Всем привет.
Подскажите пожалуйста, как правильно реализовать задуманное.

PHP:
скопировать код в буфер обмена
  1.                 $result = $db->query("SELECT * FROM s_forms_fields WHERE form = '" . $form_db['id'] . "'");
  2.  
  3.                 $list = array();
  4.                 while($field = $db->fetch($result))
  5.                 {
  6.                         $option_list = '';
  7.                         switch($field['type'])
  8.                         {
  9.                                 case 1: $where = 1; break;//input
  10.                                 case 2: $where = 2; break;//text
  11.                                 case 3:
  12.                                         $where = 3;//select
  13.                                         $opt_arr = explode("\n", $field['default']);
  14.                                         foreach($opt_arr as $opt)
  15.                                         {
  16.                                                 if(!empty($opt)) $option_list .= '<option value="' . trim($opt) . '">' . trim($opt) . '</option>';
  17.                                         }
  18.                                         break;
  19.                                 case 4: $where = 4; break;//date
  20.                         }
  21.                        
  22.                         $list[] = array(
  23.                        
  24.                                 'where' => $where, // собственно, тип
  25.                                 'title' => $field['title'], // заголовок ( label )
  26.                                 'name' => $field['name'], // name атрибут
  27.                                 'default' => $field['default'], // значение по умолчанию
  28.                                 'option' => $option_list,
  29.                        
  30.                         );
  31.  
  32.                 }
  33.  
  34.                 $tpl->assign('LIST', $list);


В кейсах определяется какой тип поля будет выведен
в кейсе 3 вывод select меню.

в шаблоне не знаю как правильно в цикле все оформить

CODE (html):
скопировать код в буфер обмена
  1. {if $list.where == '1'}
  2. <label >{$list.title}:</label>
  3. <input type="text" size="20" name="{$list.name}" class="text" value="{$list.default}" id="{$list.name}"  />
  4. {/if}
  5.  
  6. {if $list.where == '4'}
  7. <label >{$list.title}:</label>
  8. <input type="text" size="20" name="{$list.name}" class="text" value="{$list.default}" id="{$list.name}" />
  9. {/if}
  10.  
  11. {if $list.where == '3'}
  12. <label >{$list.title}:</label>
  13. <select name="{$list.name}" id="{$list.name}">{list}</select>
  14. {/if}
  15.  
  16. {if $list.where == '2'}
  17. <label>{$list.title}:</label>
  18. <textarea cols="30" rows="6" name="{$list.name}" id="{$list.name}" style="width:400px;">{$list.default}</textarea>
  19. {/if}


С учетом того, что в кейсе 3 выводится еще и список в цикле.
Пол дня бьюсь, ничего не получается(
2. smumrik - 05 Августа, 2011 - 17:05:37 - перейти к сообщению
чувак, здесь по смарти походу никто не отвечает (да так и есть)
3. illy - 05 Августа, 2011 - 17:08:43 - перейти к сообщению
smumrik пишет:
чувак, здесь по смарти походу никто не отвечает (да так и есть)
Ха-ха понятия не имею. Может это типа CMS ?
4. dropoff - 05 Августа, 2011 - 22:46:41 - перейти к сообщению
Ребят, ну помогите кто-то плиз.
А то уже отчаялся. Не пойму как цикл правильно сделать. + вложенный, если выбран select (кейс 3)
5. smumrik - 05 Августа, 2011 - 22:59:00 - перейти к сообщению
вложенные циклы не знаешь? а зачем он в шаблоне? ты же в скрипте сформировал $option_list уже!
для начала то, что написал в "CODE (html):" нужно в цикл поместить
{foreach from=$LIST item=item}
{* тело основного цикла *}
{* теперь смотрим что в $item.where *}

...................
{if $item.where == '3'}
<label >{$item.title}:</label>
<select name="{$item.name}" id="{$item.name}">{$item.option}</select>
{/if}

...............
{/foreach}

да и еще...и вывести сам шаблон после определения переменных в PHP не забудь - у тебя в коде этого нет.... Подмигивание
6. dropoff - 05 Августа, 2011 - 23:13:40 - перейти к сообщению
{foreach from=$LIST item=item} - я просто не вставил сюда. так та он есть.
Я не могу понять что внутри цикла делать. Почему-то что не пытаюсь делать, ничего не выводил.

вывод в шаблон есть. я просто все копипастить не стал.
(Добавление)
Во. Получилось!
Спасибо за помощь!!
(Добавление)
Я так и не понял в чем косяк был.
Все поправилось после изменения $LIST на $fieldsList и в цикле $item. заменил на $field.
в этом файле никаких $LIST больше нигде нет и не было, кроме как передачи в цикл
7. smumrik - 05 Августа, 2011 - 23:27:03 - перейти к сообщению
dropoff
давай сообразим тему для новичков чисто по смарти?
а то как-то кисло всё тут...
(Добавление)
я думаю косяк был в неправильных названиях переменных
8. dropoff - 05 Августа, 2011 - 23:40:28 - перейти к сообщению
Да я сам новичок) Такие вот простые вещи, как названия переменных путаю))
Хотя тема бы по smarty не помешала.

 

Powered by ExBB FM 1.0 RC1