|
|
|
| Код обработчика:
$result = mysql_query("SELECT * FROM `news`");
if(!$result) exit(mysql_error());
while ($rows = mysql_fetch_array($result)) {
print"<pre>";
print_r ($rows);
print"</pre>";
$smarty_news->assign('list', $rows_news);
$smarty_news->display("news1.tpl");
}
|
Код шаблона:
{foreach from=$list item=row)
<div class="news-page_title>{$row.page_title}</div>
<div class="news-date">{$row.date}</div>
<div class="news-body_chunk">{$row.announce}</div>
<div class="news-body"><a href="index.php?id={$row.main_file}">Читать далее (Весь текст)</a></div>
{foreachelse}
Нет значений в $list
{/foreach}
|
Вроде бы, все правильно, но выводит ошибку:
Fatal error: Smarty: [in news1.tpl line 1]: syntax error: invalid attribute name: 's:\home\myproject.ua\www..\smarty\Smarty_Compiler.class.php on line 2062
Что за синтаксическая ошибка? | |
|
|
|
|
|
|
|
для: Лена
(20.05.2008 в 12:32)
| | Ошибки в шаблоне:
В первой его строке, вместо фигурной закрывающей скобки, указана круглая скобка (об этом указано в ошибке).
Имя класса первого DIV не закрыто кавычками (хотя для смарти это не будет ошибкой).
Нет значений в $list - так лучше не писать, ибо так и будет выведено (если только это не для проверки). | |
|
|
|
|
|
|
|
для: sim5
(20.05.2008 в 12:57)
| | Ошибки исправила. Там еще одна была, вот здесь:
$smarty_news->assign('list', $rows_news);
а надо:
$smarty_news->assign('list', $rows);
Теперь блок foreah выводится как минимум раз тридцать, но мне же столько не нужно :-))
И вместо значений подставляется что-то непонятное:
2
2
2
Читать далее (Весь текст)
2
2
2
Читать далее (Весь текст)
0
0
0
Читать далее (Весь текст)
0
0
0
Читать далее (Весь текст)
1
1
1
Почему так? | |
|
|
|
|
|
|
|
для: Лена
(20.05.2008 в 14:46)
| | Потому, что в цикле переназначается while ($rows = mysql_fetch_array($result)) {.... }
Вот это ни как не должно быть в цикле:
это проверить просто
print"<pre>";
print_r ($rows);
print"</pre>";
//а это присвоить результат запроса
$smarty_news->assign('list', $rows);
$smarty_news->display("news1.tpl"); | |
|
|
|
|
|
|
|
для: sim5
(20.05.2008 в 14:54)
| | Вот это у меня не выводится, это я просто проверяла, выводятся ли значения из базы: print"<pre>";
print_r ($rows);
print"</pre>";
Убрала цикл while. Вот что теперь:
$result = mysql_query("SELECT * FROM `news`");
if(!$result) exit(mysql_error());
$rows = mysql_fetch_array($result);
$smarty_news->assign('list', $rows);
$smarty_news->display("news1.tpl");
|
Прогресса не почувствовала: все осталось таким же. Почему выводится так много записей? | |
|
|
|
|
|
|
|
для: Лена
(20.05.2008 в 15:09)
| | Определить массив до цикла, заполнить его в цикле, а уже потом его значение присвоить переменной Смарти:
<?
$result = mysql_query("SELECT * FROM `news`");
if(!$result) exit(mysql_error());
$list = array();
while ($rows = mysql_fetch_assoc($result)) { //зачем получать еще и индексные значения,
//если их не ипользовать
$list[] = $rows;
}
$smarty_news->assign('list', $list);
$smarty_news->display("news1.tpl");
|
| |
|
|
|
|
|
|
|
для: sim5
(20.05.2008 в 15:12)
| | Все получилось и я все поняла. Создаем новый массив, в котором будет столько элементов, сколько заполненных строк в базе. А потом готовый набор передаем в шаблон.
Спасибо.
Какой бы ни была связь, слава Богу, форум работает всегда. | |
|
|
|
|
|
|
|
для: Лена
(20.05.2008 в 15:25)
| | Именно так. А если:
$rows = mysql_fetch_array($result);
то получим значения только первой записи. | |
|
|
|
|
|
|
|
для: sim5
(20.05.2008 в 15:29)
| | Понимаю, что яйца курицу не учат, но...
в обоих случаях выводятся все записи. Проверила.
Различие между mysql_fetch_array() и mysql_fetch_assoc() в том, что первый возвращает и числовые индексы, и ассоциативные. На этом различие заканчивается.
В нашем примере индексные значения не используются, и у нас все значения в цикле используются. Есть записи - цикл работает, нет - цикл прекращается. Тогда какая разница какую функцию нам использовать?
Не знаю, понятно я объяснила или нет. Взяла из вашего же учебника. | |
|
|
|
|
|
|
|
для: Лена
(20.05.2008 в 16:03)
| | Зачем получать массив, который вдвое больше по размеру и половина которого не используется? Работая с числовыми индексами, получайте как mysql_fetch_row() (кстати, это самый быстрый доступ), нужен ассоциативный массив, есть mysql_fetch_assoc(), ну а если нужны будут и те, и другие данные, то для этого и служит mysql_fetch_array(). Либо можно, применяя mysql_fetch_array(), указать параметр MYSQL_ASSOC, чтобы отсечь бесполезное для вашего случая. | |
|
|
|
|
|
|
|
для: sim5
(20.05.2008 в 16:20)
| | Большое дружное спасибо. | |
|
|
|