Smarty-шаблоны для вывода записей из БД

Smarty-шаблоны для вывода записей из БД используются в связке:
  • дизайн: Smarty-шаблоны
  • администрирование БД: классическая админка AdvOntology

Файлы шаблонов с расширением .txt должны храниться в папке, прописанной в параметре template_dir, который задается при инициализации шаблона.

Инициализация и вызов

1. инициализация в расширении MyExt

<?php
function NewSmarty() {
        
$mythis $this->_kernel;
        
$sm $mythis->NewSmarty ();
        
$def $mythis->getSiteDataPath (). 
            
'data/' $this->_localname '/';
        
$sm->template_dir $def 'templates/';
        
$sm->compile_dir $def 'templates_c/';
        
$sm->config_dir $def 'config/';
        
$sm->cache_dir $def 'cache/';
        
$sm->plugins_dir [] = $def 'plugins/';
        
        
//$mythis->smartyServicesPlugins($sm);
        
return $sm;
    }
?>

2. вызов в action

<?php
$srvOnto 
$this->srvFactory("AdvOntology");     
        
/* @var $srvOnto Service_AdvOntology */
    
$srvMyExt $this->srvFactory("MyExtension"); 

    
$arr $srvOnto->getAllConcepts("MyType");
    
$sm $srvMyExt->NewSmarty();
    
$sm->assign("items"$arr);
    echo 
$sm->fetch('myPattern.txt');
?>

  

1. инициализация и вызов в action

<?php
$srvOnto 
$this->srvFactory("AdvOntology");
    
$kernel $this->srvMainKernel();
    
    
$arr $srvOnto->getAllConcepts("MyType");

        
// ... 
        // ... обработка элементов
        // ... 
    
    
$mythis $this->_kernel;
    
$sm $mythis->NewSmarty ();
    
$def $mythis->getSiteDataPath ().
        
'data/WikiPatterns/templates/xxxxxxxxxx/';
    
$sm->template_dir $def 'templates/';
    
$sm->compile_dir $def 'templates_c/';
    
$sm->config_dir $def 'config/';
    
$sm->cache_dir $def 'cache/';
    
$sm->plugins_dir [] = $def 'plugins/';
    
    
$sm->assign("items"$arr);
    echo 
$sm->fetch('myPattern.txt');
    
    echo 
'<textarea style="width: 100%;" rows="20">';
    
print_r($arr);
    echo 
"</textarea>";
?>



Файл шаблона myPattern.txt

Пример файла myPattern.txt.
Обращение к элементам массива в цикле foreach:

  • from – имя переменной в php
  • item – имя элемента массива внутри цикла; $item.param в Smarty соответствует $item["param"] в php.

{foreach from=$items item=item}
      <div class="play"><table><tr>      
        <td class="date">
          <div class="day">{$item.datetime|date_format:"%e"}</div>
          <div class="month">{$item.month}</div>
          <div class="time_">{$item.datetime|date_format:"%H:%M"}</div></td>
        <td><a href="{$item.href}"><img class="img-link" src="{$item.img}"></a></td>
        <td class="about {if $item.play.premier=="1"}premier{/if}" width="450px">
          <div class="title"><a href="{$item.href}">{$item.play.name}</a></div>
          <div class="author">{$item.play.author_short}</div>
          <div class="desc">{$item.play.comm_short}</div></td>
        <td class="links">&nbsp;</td>
      </tr></table></div><br/><hr/>
{/foreach}

Админка AdvOntology

Стандартная админка:

{{adminadvontology type="MyType" max="10"}}

Кастомная админка:
<?php
$srvOnto 
$this->srvFactory("AdvOntology");
    
$kernel $this->srvMainKernel();
    
$months = array ("""января""февраля""марта""апреля""мая""июня""июля""августа""сентября""октября""ноября""декабря");
    
    
$links $srvOnto->getAllConcepts("linkkamAfisha"0100"datetime""ASC");

    echo 
'<div align="center"><i>Просмотр таблицы Афиша</i></div><br>';
    echo 
'<table border="0" width="100%"><tbody><tr style="background-color: black;"><td style="width: 22px;"></td><td style="width: 22px;"></td><td><b>Дата</b></td><td><b>Время</b></td><td><b>Спектакль</b></td><td style="width: 22px;"></td></tr>';
    
$i=0;
    foreach (
$links as $item) {
        
$play     $srvOnto->getConcept("wpkamPlay",   $item["kamPlay1"]);
        
$style = (fmod($i++, 2) == 0)?'style="background-color: rgb(50, 50, 50);"':'';
        
$playdate strtotime($item["datetime"]);
        echo 
'<tr '.$style.'>
                <td><small><a href="?editid='
.$item["id"].'">
                    <img src="'
.$kernel->config["root_url"].'images/additional/edit.png" alt="Править" style="border: 0px none;"></a></small></td>
                <td>'
.$item["id"].'</td>
                <td>'
.date("j"$playdate)." ".$months[date("n"$playdate)].'</td>
                <td>'
.date("H:i"$playdate).'</td>
                <td>'
.$play["name"].'</td>
                <td><small><a href="?deleteid='
.$item["id"].'">
                    <img src="'
.$kernel->config["root_url"].'images/additional/drop.png" alt="Удалить" style="border: 0px none;" onclick="return delTableItem();"></a></small></td>
            </tr>'
;        
    }    
    echo 
'</tbody></table>';
    
    
if(
$this->IsAdmin()) {
   
// security init
    
$this->secAdminedittable true;
    
$this->secAdminviewtable true;
    
// init adminviewtable
    
$tname='advontotypes_linkkamAfisha';
    
// init adminedittable
    
$notparse '1';
    
$fieldar = array (
           array (
'Спектакль','kamPlay1','tselect table="advontotypes_wpkamPlay" field="name" key="id"'''),
        array (
'Дата и время','datetime','datetime''')
    );

    include(
'actions/adminedittable.php');
    
//security finalization
    
$this->secAdminedittable false;    
    
$this->secAdminviewtable false;
}
?>