olimpset
4.05.2013 - 22:06
Есть например
функция вывода всех
данных из
базы данных, как вывести такую функцию в Smarty?
function all_zapisi()
{
include_once 'configs/config.php';
$sql = mysql_query("SELECT * FROM zapisi");
while($row = mysql_fetch_array($sql))
{
global $id;
$id = $row['id'];
global $news;
$news = $row['news'];
global $title;
$title = $row['title'];
include 'include_news.tpl';
}
}
include_news.tpl - код блока с записями.
Игорь_Vasinsky
4.05.2013 - 22:17
собери в массив и потом разбери в {foreach}{/foreach} -вроде так
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
olimpset
4.05.2013 - 22:20
А как собрать в массив, точнее как в тегах правильно вывести ?
Собрать двумерный массив, закинуть его в смарти и там прогнать foreach.
while($row = mysql_fetch_array($sql))
$data[]=$row;
$smarty->assign('data', $data);
$smarty->display('шаблон');
В шаблоне так:
{foreach from = $data key=key item=content }
{$content.id}<BR/><p>Какой-то HTML КОД</p>
{$content.news}
{/foreach}
Вот примерно так.
olimpset
4.05.2013 - 22:24
А как сделать, что бы каждый раз подключался файл include_news.tpl ?
ilyaplot
4.05.2013 - 22:24
$data = array();
while($row = mysql_fetch_array($sql)) {
$data[] = $row;
}
$smarty->assign('data',$data);
далее перебираем массив $data в smarty.
опоздал...
_____________
Заработай на Userator
Игорь_Vasinsky
4.05.2013 - 22:26
смарти в ад.
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
olimpset, а зачем вам его подключать? Файл подключает Smarty функцией display. Или вы что имеете ввиду?
olimpset
4.05.2013 - 22:29
Ну display подключает файл с нуля, а мне надо что бы, подключался файл и выводилось содержимое в шаблоне в определенном месте.
Ааааа.... Тогда вот как:
В родительском шаблоне пишите:
Какой-то HTML
<div>
{include file=$file}
</div>
какой-то HTML
вызываете функцией display родителя. И передаете в смарти еще один параметр - название подключаемого файла. В итоге у вас получается один большой шаблон из 2-х файлов.
А как вы инициализируете смарти?
Вот должно быть что-то вроде:
$smarty = new Smarty();
$smarty->template_dir = $_SERVER['DOCUMENT_ROOT'] . '/tmpl/templates';
$smarty->compile_dir = $_SERVER['DOCUMENT_ROOT'] . '/tmpl/templates_c';
Но на самом деле лучше пользоваться наследованием шаблонов, а не инклюдом. Но это сложно объяснить в сообщении.
olimpset
4.05.2013 - 22:39
У меня все папки стандартные.
Как сделать, что бы файл подключался каждый раз когда выполняется цикл, ну одно подключение = одна запись, а если записей много, значит надо много раз подключить файл.
olimpset, нет, Smarty в цикле не нужно выполнять. Вы просто собираете данные для заполнения шаблона. Потом закидываете в смарти собранные данные (по существу заполняете экземпляр класса) и вызываете display. Этак функция загружает шаблон и загружает в него все данные. А дальше с этими данными в шаблоне вы можете делать чего угодно: прогонять циклы, писать условия и т.д.
То есть вы разделяете бизнес-логику от HTML форматирования. В это суть и заключается.
Ну в целом картина такая:
index.
php:
$smarty = new Smarty();
$smarty->template_dir = $_SERVER['DOCUMENT_ROOT'] . '/tmpl/templates';
$smarty->compile_dir = $_SERVER['DOCUMENT_ROOT'] . '/tmpl/templates_c';
while($row = mysql_fetch_array($sql))
{
$data[]=$row;
}
$smarty->assign('data', $data);
$smarty->assign('file', 'подгружаемый_блок.tpl');
$smarty->display('основной_шаблон.tpl');
основной_шаблон.tpl:
Какой-то HTML
<div>
{include file=$file}
</div>
какой-то HTML
подгружаемый_блок.tpl:
{foreach from = $data key=key item=content }
{$content.id}<BR/><p>Какой-то HTML КОД</p>
{$content.news}
{/foreach}
Можно и не прописывать инклуды в шаблоне
$smarty->assign('data', $data);
$smarty->assign('file', $smarty->fetch('подгружаемый_блок.tpl'));
$smarty->display('основной_шаблон.tpl');
Какой-то HTML
<div>
{$file}
</div>
какой-то HTML
_____________
Mysql, Postgresql, Redis, Memcached, Unit Testing, CI, Kohana, Yii, Phalcon, Zend Framework, Joomla, Open Cart, Ymaps, VK Api
olimpset
5.05.2013 - 13:58
А как тогда запустить выполнение функции, я делал так, но что то не работает:
$smarty->assign('all_zapisi', all_zapisi());
all_zapisi() -
Функция, как ее выполнить ?
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.