Архив рубрики: Smarty

Вывод каталога используя smarty

Smarty ШаблонизаторИтак необходимо реализовать вывод каталога с подкаталогами неограниченной вложенностью, используя шаблонизатор smarty.

Один из способов:

1. Прежде чем начать необходимо иметь таблицу в нашей БД с необходимыми данными. К примеру как на рисунке ниже.

Таблица MySql для реализации вывода каталогов2. Теперь пишем необходимый php код в файле index.php
в комментариях необходимые пояснения

require('../libs/Smarty.class.php'); //подключение smarty

include "authBD.php"; //в этом файле подключаем БД

$smarty = new Smarty; // создаем объект шаблонизатора

// создаем текст запроса для выборки из нашей БД
$query = "select * from category"; 

// делаем выборку и заносим в массив
$result_table  = mysql_query($query) or die(mysql_error());
$rows_array=array();
while ($row=mysql_fetch_array($result_table))
   $rows_array[]=$row;

//формируем дерево из выборки
 $cat_tree=select_to_array_tr($rows_array); 

//создаем переменную для нашего дерева каталогов
$smarty->assign('cat1', $cat_tree);

//вызываем шаблон
$smarty->display('index.tpl');

3. Формирования дерева из массива выборки

Функция не использует рекурсию, основана на ссылках, в child хранятся подкаталоги если они есть у родителя.

Листинг

function select_to_array_tr($arr,$mk='Id_cat',$sk='Id_parent',$child='child')
{  // если нет создаем
    if(!$arr) {
        return array();
    }

    $mas = array();
    $l = count($arr); //кол-во элементов в массиве
    for($i = 0; $i < $l; $i++) {
        $mas[ $arr[$i][$mk] ] = &$arr[$i];
    }
    // child - массив дочерних каталогов
    foreach($mas as $k => $v) {
        $mas[ $v[$sk] ][$child][] = &$mas[$k];
    }

    $res = array();
    foreach($arr as $v) {
        if(isset($v[$sk]) && $v[$sk] == 0) {
            $res[] = $v;
        }
    }
//возвращаем готовый массив
     $arr = $res;
    return $arr;
}

необходимо добавить ее в наш файл index.php перед ее вызовом.

4. Необходимо отредактировать шаблон index.tpl, он находится в папке templates.

Листинг шаблона index.tpl

<ul>
{foreach item='ListTree' from=$cat1}
{* вывод корневых каталогов *}   
     <li>{$ListTree.Name}    </li>
{* вывод подкаталогов используется рекурсия шаблонов *}
    {if count($ListTree.child)>0}
        {include file='ListTree.tpl' object=$ListTree}
    {/if }    
{/foreach}
</ul>

5. Затем создадим файл ListTree.tpl со следующим кодом(ниже) и сохраним в папке templates. Этот шаблон будет вызываться для всех дочерних каталогов.

Листинг шаблона ListTree.tpl

<ul>
{foreach item='ListTree' from=$object.child}
{* вывод корневых каталогов *}
     <li>{$ListTree.Name}    </li>
{* вывод подкаталогов используется рекурсия шаблонов *}
    {if count($ListTree.child)>0}
        {include file='ListTree.tpl' object=$ListTree}
    {/if }
{/foreach}
</ul>

Результат получается такой

Вывод каталога используя Smarty

Smarty и MySql

Smarty ШаблонизаторВывод данных из базы данных Mysql используя шаблогизатор Smarty.

1. Формируем необходимые данные из нашей базы данных

 

Листинг php кода

require('../libs/Smarty.class.php');
include "auth.php"; //здесь код для подключения к БД
$smarty = new Smarty; // создаем объект
$table = 'cat1'; //наша таблица с данными
$query = "select * from $table"; //формируем запрос
$result  = mysql_query($query) or die(mysql_error());
$rows=array();
while ($row=mysql_fetch_array($result))
   $rows[]=$row;
$smarty->assign('cat1', $rows); //переменная для шаблона
$smarty->display('index.tpl');

2. Добавить код для вставки в шаблоне index.tpl для вывода наших данных

 {foreach from=$cat1 item=item}
   <p>{$item.IdCat} - {$item.NameCat} - {$item.Idcc}</p>
{/foreach}

Первые шаги в Smarty

Smaty ШаблонизаторВывод данных используя шаблонизатор Smarty.

В файле index.php прописываем необходимые данные которые необходимо вывести в шаблоне.

 

Листинг примера файла index.php

include('Smarty.class.php');

// создаем объект шаблонизатора
$smarty = new Smarty;

// Здесь идет код php в котором получаем
// данные, контент необходимый для вывода
// Назначаем переменные и их значения
$smarty->assign('cars', 'Лада ');
$smarty->assign('colors', 'Белая');

// вызываем шаблон, который необходимо показать
$smarty->display('index.tpl');

Редактируем шаблон index.tpl

<html>
<head>
<title>Наш сайт о машине</title>
</head>
<body>
Информация о машине:
Марка: {$cars}
Цвет: {$colors}
</body>
</html>

Должно получиться в итоге на нашем сайте

Информация о машине:
Марка: Лада
Цвет: Белая

Коротко

1. файл index.php — получаем данные, создаем шаблонные переменные
2. файлы template *.tpl — помещаем переменные в нужное место шаблона

Инструкция по установке Smarty

Smaty ШаблонизаторУстановка Smarty

1. Скачать с официального сайта архив

2. Распаковать в корень сайта. Распределить папки как на рисунке ниже. Папки cache, configs и т.д. лежат в папке demo в скаченном архиве.

smarty_folder_setup3. Проверка. Набрать адрес нашего сайта. Для этого примера будет что то типа Http:\\example.com\smarty\ Должна быть показана демо страница.

Шаблоны находятся в папке templates.