[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Smarty и функции
Страницы: 1, 2
olimpset
Есть например функция вывода всех данных из базы данных, как вывести такую функцию в 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'];
//$smarty->assign('id',"$id");
//$smarty->assign('news',"$news");
//$smarty->assign('title',"$title");
//$smarty->display('include_news.tpl');

include 'include_news.tpl';
}
}

include_news.tpl - код блока с записями.
Игорь_Vasinsky
собери в массив и потом разбери в {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
А как собрать в массив, точнее как в тегах правильно вывести ?
paul85
Собрать двумерный массив, закинуть его в смарти и там прогнать 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
А как сделать, что бы каждый раз подключался файл include_news.tpl ?
ilyaplot
$data = array();
while($row = mysql_fetch_array($sql)) {
$data[] = $row;
}

$smarty->assign('data',$data);


далее перебираем массив $data в smarty.

опоздал...

_____________
Заработай на Userator
Игорь_Vasinsky
смарти в ад.

_____________
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
paul85
olimpset, а зачем вам его подключать? Файл подключает Smarty функцией display. Или вы что имеете ввиду?
olimpset
Ну display подключает файл с нуля, а мне надо что бы, подключался файл и выводилось содержимое в шаблоне в определенном месте.
paul85
Ааааа.... Тогда вот как:

В родительском шаблоне пишите:
Какой-то 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
У меня все папки стандартные.
Как сделать, что бы файл подключался каждый раз когда выполняется цикл, ну одно подключение = одна запись, а если записей много, значит надо много раз подключить файл.
paul85
olimpset, нет, Smarty в цикле не нужно выполнять. Вы просто собираете данные для заполнения шаблона. Потом закидываете в смарти собранные данные (по существу заполняете экземпляр класса) и вызываете display. Этак функция загружает шаблон и загружает в него все данные. А дальше с этими данными в шаблоне вы можете делать чего угодно: прогонять циклы, писать условия и т.д.

То есть вы разделяете бизнес-логику от HTML форматирования. В это суть и заключается.
paul85
Ну в целом картина такая:
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}
T1grOK
Можно и не прописывать инклуды в шаблоне
$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
А как тогда запустить выполнение функции, я делал так, но что то не работает:
$smarty->assign('all_zapisi', all_zapisi());

all_zapisi() - Функция, как ее выполнить ?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.