А можно узнать что у вас в контроллерах творится?
вызов нужного шаблона?
Есть главный контроллер - он по умолчанию всегда идет один и тот-же - в который можно задать определенные настройки... По своей спицифике он имеет определенный стандарт (определенным образом сохраняется кэш, подключаются плагины: ссылки, mysql_exec, pageNotFoundAndExit, DB и прочие)... И есть
дополнительный, который можно подключить в самом шаблоне (сколько угодно - но если нужно хватает 1-ого - для выполнения специфических задач - которые делать в самом шаблоне не уместно...). Также по умолчанию уже в шаблон (который ниже в качестве примера) приходят (поставляются) определенные данные... Данные о странице, и данные об элементе содержимого - если шаблон таковым является.
Подобным образом можно решать однотипные задачи не пребегая к таким сложным вещам как MVC, фреймворки (хотя по валидации форм не отказался бы), а также другие стандартные решения на основе ООП..
CSS- подключается сверху страницы - все в 1-файле.
JS - скрипты все подключаются внизу страницы (так называемое подключение JS-файлов в футоре).
Также есть определенные параметры (настройки) - на уровне самого сайта...
Которые можно поменять через форму ввода (к примеру электронный адрес, на который приходят письма, кол-во элементов на страницу) - это что-то вроде глобальных констант на весь проект.
В данном примере - это форма заказать звонок с использованием AJAX.
HTML:
<!--
ШАБЛОН ФАЙЛА ДЛЯ ЭЛЕМЕНТА КОНТЕНТА - ЗАКАЗАТЬ ЗВОНОК:
..../template/systemdir/tpl-ajax_plugin_feedback_form.html
-->
<!--(SMARTY :: start) tpl-ajax_plugin_feedback_form.html -->
<!--заголовок - начало-->
<!--Подключаем php-мини-контрллер для нашей формы-->
{include_php file='..../template/tpl-ajax_plugin_feedback_form_controller.php'}
<!-- Если контроллер передал, что форма отрпавленна успшено (header)-->
{if $smarty.get.send == "ok"}
<span style="color: green">Спасибо за использование формы заказа звонка.
В ближайщее время наши сотрудники свяжутся с Вами.</span>
{else}
<form id="feedback_form" action="feedback.ajax" method="post" data-ajax=true>
<span style="color: green;">Заказать обратный звонок</span><br /><br />
Ваше имя: <!--Если есть ошибки--><span style="color: red;">{$array_error.myname}</span><br />
<input type="text" name="tx_pajax_feedback[myname]" class="resetvalue {$array_error.myname}"
value="{$smarty.post.tx_pajax_feedback.myname|strip_tags|htmlspecialchars|stripslashes}"
size="32" maxlength="32"><br />
<!--<span style="color: gray;">Как к вам обращаться...</span><br />-->
<br />
Телефон: <!--Если есть ошибки--><span style="color: red;">{$array_error.tphone}</span><br />
<input type="text" name="tx_pajax_feedback[tphone]" class="resetvalue"
value="{$smarty.post.tx_pajax_feedback.tphone|strip_tags|htmlspecialchars|stripslashes}"
data-default="+7 (916) 000-00-00" size="25" maxlength="20"><br />
<span style="color: gray;">Образец: +7 (916) 000-00-00</span><br />
<br />
Защита от спама: <!--Если есть ошибки--><span style="color: red;">{$array_error.captcha}</span>
<br />чему будет равно {data source="DB:tx_web_settings:1:ajax_plugin_feedback_cprotected"}=
<input type="text" name="tx_pajax_feedback[captcha]"
value="{$smarty.post.tx_pajax_feedback.captcha|strip_tags|htmlspecialchars|stripslashes}" size="5" maxlength="2"><br />
<br />
<input type="submit" value="Заказать звонок" class="feedback_submit">
</form>
{/if}
<!--заголовок - конец-->
<!--(SMARTY :: end) tpl-ajax_plugin_feedback_form.html -->
PHP:
<?php
#---------------------------------------------------------------------------------------------
# Данным небольшим котроллером описываем материал для поведения формы "Заказать обратный звонок"
# Также производится отправка почты на адрес администратора
#---------------------------------------------------------------------------------------------
/*
"statusode_form"
Коды формы
0 - данные не переданы
1 - данные переданы (успех - а) отправляем письмо администратору б) заносим запись в БД в) выводим сообщение "Ваш звонок заказан")
2 - данные переданы - есть ошибки
*/
if (count($GLOBALS['_POST']) > 0){
// Начинаем проверку и поиск ошибок в форме
$allElementForm = t3lib_div::_POST('tx_pajax_feedback');
// Проходим по всем необходимым полям данных
foreach ($allElementForm as $key => $value) {
$value = trim ( $value ); $messege = null;
switch ($key)
{
//"Ваше имя, псевдоним"
case 'myname':
// Если ноль
if ($value == null)
$messege[] = "пустое значение";
// Если ноль или малое
// if (mb_strlen($value, 'UTF-8') < 2)
// $messege[] = "не полное значение";
break;
//"Телефон"
case 'tphone':
/*
Формат телефона ^
Зеленый свет для:
+7 (916) 000-00-00
*/
if (!preg_match('|^\+\d{1,3}\s?\(\d{3}\)\s?\d{3}(-\d{2}){2}$|', $value))
$messege[] = "задан не верно";
break;
//"Проверка: чему будет равно (2+7)-5*"+
case 'captcha':
// Получаем из.глоб.настроек формулу...
//ajax_plugin_feedback_cprotected
$pRecordvalue = t3lib_befunc::getRecord('tx_web_settings', 1, "ajax_plugin_feedback_cprotected");
// проверяем и вычисляем значение формулы
if ($value != eval("return (".$pRecordvalue['ajax_plugin_feedback_cprotected'].");"))
$messege[] = "не верный код";
// Если не верно введен код защиты (матем.выражение)
// if ($value != 4) $messege[] = "Не верное значение";
break;
}
// Собираем ошибки
if (count ($messege) > 0)
$arError[$key] = implode (";<br />\n" , $messege) . ".";
}
// Проверяем - если есть ошибки "КОД - 2"
if ( count($arError) > 0 ) {
$this->assign('array_error', $arError); // отправляем массив с обишками
$this->assign('statusode_form', "2/3"); // отправляем код
} else {
// Ошибок нет
// б) заносим запись в БД
// а) отправляем письмо администратору
// в) перенаправляем на страницу "Спасибо!")
//Получаем шаблон письма:
tt_content_guestbook_form_controller_operationDBinsert();
tt_content_guestbook_form_controller_operationSendmail();
header ('Location: ' . t3lib_div::locationHeaderURL('/feedback.ajax?send=ok'));
//$this->assign('statusode_form', "1/3"); // отправляем код
}
} else {
// Данные не переданы "КОД - 0"
// $this->assign('statusode_form', "0/3"); // отпраляем код
}
//Вспомогательная функция - добавление записи в БД
function tt_content_guestbook_form_controller_operationDBinsert(){
//Получаем значение формы
///...............
}
//Вспомогательная функция отправки сообщения на адрес администратора
function tt_content_guestbook_form_controller_operationSendmail(){
//Получаем значение формы
////..............
}
?>
Код:
// Ajax-обработка формы при нажатии на кнопку отправить сообщение
// Перехватываем событие по нажатию на нашу кнопку Submit "Заказать"
$(document).on("submit","form[data-ajax=true]",function (evt) {
// Блокируем кнопку средствами при отправке (как у UCOZ) - очень нравиться..
$("input.feedback_submit").attr("disabled",true);
$("input.feedback_submit").attr("value", "Отправка формы...");
// Отправляем запрос на ajax
$.ajax({
type: "POST", // тип
cache: false, // не кэшировать
url: "/feedback.ajax", //адрес
data: $('#feedback_form').serialize(), // отправляем данные
success: function(html){
$("div.fancybox-inner").html(html);
}
});
return false;
});
Также есть еще шаблон письма (просто текстовый файл), mysql-табличка и интерфейс из форм для отслеживания статуса сделанных обратных звонов.
При подобном подходе ведущей является верстка макета (V) - а не контроллер - как обычно (C)...
-