Шаблоны модулей

Комментарии ()

Основнымы движущими силами CMS "Движок" есть старые добрые модули, которые щас модно трансформировались в контроллеры и тому подобное. У нас же данный рычаг управления будет называться по старинке: модуль. И так, в процессе написания модулей я заметил, что основной склет функциональных файлов практически не изменяется. Возможно у вас вопрос, зачем плодить файлы которые практически идентичны? На мой взгляд намного это припятствует возникновению проблем, когда нужно заточить тот или иной модуль под свои специфичные нужды, при этом сосед по парте не потсрадает.

В подавляющем большинстве случаев, в модуле присутствуют следующие файлы:

  • {module_name}_index.php
  • {module_name}_add.php
  • {module_name}_edit.php
  • {module_name}_edit_post.php
  • {module_name}_del.php
  • {module_name}_index.php

Приведу сами шаблоны

{module_name}_index.php

<?php

/* @var $log Log */
/* @var $lang Lang */
/* @var $user User */
/* @var $error Error */
/* @var $pages PagesAdmin */

#Заборона прямого дуступу
defined( 'ACCESS' ) or die( 'Restricted access' );

$user->isPermitAuth();
$user->isPermitUserStatus('admin');

$tpl = new HTML_Template_IT(_DIR.'template/'._THEME.'/module/'._MOD.'/');
$tpl->loadTemplatefile(_MOD.'_'._ACT.'.tpl',true,true);

$user->showTplStandart($tpl);


$query=sprintf("SELECT * FROM `"._ACT."` WHERE `visible`=1 ORDER BY `alias`");

$page = 1;
if (!empty($_GET['page'])) {
    $page = $_GET['page'];
}
$pages = new PagesAdmin(); # создание объекта
$pages->setQuery($query); # задаем ранее подготовленый sql-запрос для выборки
$pages->setPageRows(15); # кількість записів на сторніці
$pages->setWidth(3); # задаем количество номеров страниц по левую и правую сторону от выбраной страницы
$pages->setPage($page); # задаем выбраную страницу
$pages->setTemplateFile('new.tpl');
$pages->setTemplate(_DIR . 'template/' . _THEME . '/inc/pages/'); # указываем путь к каталогу с шаблоном для панели страниц
$pages->showPages($tpl, "pages"); # вывод панели страниц
$query = $pages->getQuery(); # получаем обработанный sql-запрос (с LIMIT) для дальнейшего
//echo $query;


//echo $query;
 $res=$db->query($query);
 $i=0;
 while ($row=$res->fetchrow())
 {
   $i++;
   $tpl->setVariable('block_dictionary_num',($i+$pages->getPageStart()));   
   $tpl->setVariable('_block_dictionary_www',_WWW);   
   $tpl->setVariable('_block_dictionary_mod',_MOD);   
   $tpl->setVariable('_block_dictionary_act',_ACT);   
   $tpl->setVariable('block_dictionary_id',$row['id']);      
   $tpl->setVariable('block_dictionary_word',$row['word_'.$lang->getLangAlias()]);
   $tpl->setVariable('block_dictionary_alias',$row['alias']);
   
   $lang->ShowAllDictionaryToTemplate(array('tpl'=>$tpl,'tpl_block'=>'block_dictionary','params'=>'u'));
   $tpl->parse('block_dictionary');
   
 }

?>

add.php

<?php

/* @var $sql Sql */
/* @var $error Error */
/* @var $log Log */

#Заборона прямого дуступу
defined( 'ACCESS' ) or die( 'Restricted access' );

$user->isPermitAuth();
$user->isPermitUserStatus('admin');


$id=$sql->insertFields('...', array('date_create'=>date('Y-m-d H:i:s'),'visible'=>0));

$user->redirect(_WWW.'admin/.../edit/'.$id.'/');
exit;

?>

edit.php

<?php

/* @var $user User */
/* @var $sql Sql */
/* @var $kurs Kursvalut */
/* @var $lang Lang */
/* @var $error Error */
/* @var $log Log */

#Заборона прямого дуступу
defined('ACCESS') or die('Restricted access');

$user->isPermitAuth();
$user->isPermitUserStatus('admin');

$tpl = new HTML_Template_IT(_DIR . 'template/' . _THEME . '/module/' . _MOD . "/");
$tpl->loadTemplatefile(_MOD . "_" . _ACT . "_" . _OP . ".tpl", true, true);

$user->showTplStandart($tpl);
$tpl->setVariable("id", $_GET['id']);

#Визначаю тип групи правил, та вивожу їх
$rule_group_type=$form->getTypeRuleGroup('...', 'id',$_GET['id']);
$rule_group='..._'.$rule_group_type;
$tpl->setVariable('rule_group', $rule_group);

$row = $sql->select('...', '*', array('id' => $_GET['id']));

#elementName
$array = array(
    'element_type' => 'text', 
    'element_name' => 'name',
    'element_label' => 'name_',
    'element_readonly' => false,
    'element_disabled' => false,
    'element_value' => $row['name']
);
$tpl->setVariable('elementName', $form->getElement($array));

?>

edit_post.php

<?php

/* @var $user User */
/* @var $sql Sql */
/* @var $kurs Kursvalut */
/* @var $lang Lang */
/* @var $error Error */
/* @var $log Log */

#Заборона прямого дуступу
defined('ACCESS') or die('Restricted access');

$user->isPermitAuth();
$user->isPermitUserStatus('admin');

#Визначаю тип групи правил, та вивожу їх
$rule_group_type=$form->getTypeRuleGroup('...', 'id',$_POST['id']);
$rule_group='..._'.$rule_group_type;
$res=$form->checkRule($rule_group, $_POST);

if ($res['flag']==false)
{
    /*
	Суть така, якщо обійшли js перевірку, то тут редірект на edit і знову перевірка через js (але якшо js-не працює, то просто редірект)
	$error->setError();
    $form->setJSVariable('check_rule', 'true');
    $form->setJSVariable('check_rule_group', $rule_group);
    $error->setData($_POST);
	*/
    $user->redirect(_WWW . 'admin/' . _ACT . '/edit/' . $_POST['id'] . '/');
	exit;
} 

$array=$_POST;
$array['visible']=1;

# оновлюємо інфу
$sql->updateFields('...', 'id', $_POST['id'], $array);

$user->redirect(_WWW . _MOD . '/' . _ACT . '/');
exit;

?>

del.php

<?php

/* @var $log Log */

#Заборона прямого дуступу
defined('ACCESS') or die('Restricted access');

$user->isPermitAuth();
$user->isPermitUserStatus('admin');

/*
Тут якась перевірка
if (... != $_GET['id']) 
*/
    $sql->delete('...', 'id', $_GET['id']);

$user->redirect(_WWW . 'admin/lang/');
exit;
?>

Шаблоны

index.tpl

<legend>{dictionary_}</legend>

<div class="container-fluid " style="background:#FFFFFF">
<table class="table table-striped  table-hover table-condensed">
 <thead>
  <tr>
    <th align="center">№</th>
    <th align="center">{alias_}</th>
    <th align="center">{value_}</th>
    <th width="118" align="center"><a class="btn btn-small" href="{www}{mod}/{act}/add/" title="{add_}"><i class="icon-plus"></i></a></th>
  </tr>
  </thead>
  <tbody>
  <!-- BEGIN block_dictionary -->
  <tr align="center">
    <td width="149">{block_dictionary_num}</td>
    <td width="150">{block_dictionary_alias}</td>
    <td width="156">{block_dictionary_word}</td>
  <td>
  <div class="btn-toolbar" style="padding:0px;margin:0px;">
            <div class="btn-group">
            	<a class="btn btn-small" href="{_block_dictionary_www}admin/dictionary/edit/{block_dictionary_id}/" title="{block_dictionary_edit_}"><i class="icon-edit"></i></a> 
                <a class="btn btn-small" href="{_block_dictionary_www}admin/dictionary/del/{block_dictionary_id}/"  title="{block_dictionary_delete_}" onclick="return confirm('Знищити?');"><i class="icon-remove"></i></a>
            </div>
          </div>
</td>
  </tr>
  <!-- END block_dictionary -->
  </tbody>
<tfoot>
      <tr>
        <td colspan="12">  </td>
      </tr>
    </tfoot>  
</table>

{pages}

edit.tpl

<script language="javascript">
$(document).ready(function(){
	$("#button_save").click(function(){
		if (checkRule('{rule_group}'))
		{
			$('#form_save').submit();
		}
	})
})
</script>

<div class="alert alert-error hide" id="error_main"></div>
<legend></legend>  
{lang_panel-}
<br>
<form action="{www}" method="post" id="form_save" class="form-horizontal">
  <input type="hidden" name="mod" id="mod" value="{mod}">
  <input type="hidden" name="act" id="act" value="{act}">
  <input type="hidden" name="op" id="op" value="{op}">
  <input type="hidden" name="id" id="id" value="{id}">
  <fieldset>  
  
  {elementAlias}
  {elementWord}

  <div class="form-actions">  
    <button class="btn btn-primary" type="button" name="button_save" id="button_save">Сохранить</button>

    </div>
  </fieldset>  

</form>

 


Webit.in.ua 2013