Прервать выполнение шаблона Smarty

Фанат

oncle terrible
Команда форума
AmdY, по-моему, ты принимал не пиво, а что-то гораздо более тяжёлое.
 

Фанат

oncle terrible
Команда форума
Но все-таки я надеюсь, что ты просто не понял задачу. В которой никакой "модели" даже запаха нету, а шаблон самомодифицирующийся, действующий по принципу двоечника у доски - если написал глупость, то кидаться судорожно стирать уже написанное.
Давай, помогай чувачку проворачивать фарш назад.

"Модели", my ass.
 

PHProgress

Новичок
Но все-таки я надеюсь, что ты просто не понял задачу. В которой никакой "модели" даже запаха нету, а шаблон самомодифицирующийся, действующий по принципу двоечника у доски - если написал глупость, то кидаться судорожно стирать уже написанное.
Давай, помогай чувачку проворачивать фарш назад.

"Модели", my ass.
Фанат
Согласен с Вами - что если подобным образом пробовать "бурить" - модели...
И пробовать там что-то СТАНДАРТИЗИРОВАТЬ там...
То это полный бред.

Но в решении однотипных задач...
Это самое оно.

Вот один из примеров - подобного sql-плагина...
http://willem.engen.nl/projects/smarty/


---
 

fixxxer

К.О.
Партнер клуба
Ты согласен с чем-то в своей голове, а не с Фанатом.=)

Подобные "плагины" и "решения" рождаются в голове у тех, кто до этого всю жизнь писал лапшекод вида mysql_query/mysql_fetch_row/echo и не представляют себе иного подхода - потому и в template engine тянут ту же лапшу. Но в этом случае нет никакого смысла использовать template engine.
 

PHProgress

Новичок
Ты согласен с чем-то в своей голове, а не с Фанатом.=)

Подобные "плагины" и "решения" рождаются в голове у тех, кто до этого всю жизнь писал лапшекод вида mysql_query/mysql_fetch_row/echo и не представляют себе иного подхода - потому и в template engine тянут ту же лапшу. Но в этом случае нет никакого смысла использовать template engine.
Не зря же говорю...
Что нет потребности в моделях.
Есть потребность в 1 запросе к 1 таблице (где еще может быть будет добавляться join) - все...
По этой причине и сделан подобный плагин и ищется рещение о 404-ошибке.

--
Что такое модель из 4-10 таблиц я представляю...
Выше не залазил.
И к моделям точно бы и делал запросы руками в php-smarty по модели делал...
 

Фанат

oncle terrible
Команда форума
Убери-ка ты подпись тоже.
Потом стыда не оберёшься, если кто-то поведётся на "мощные сайты на ТУПО"
 

WMix

герр M:)ller
Партнер клуба
Не совсем понял как это имеется в виду?
чтож непонятного?
получить данные, (тут думаем только о данных, логике) модель данных на уровне php
PHP:
$smarty->assign('dampitem', 
    $db->getRows('select * from tt_content_worker where pid = 41')
);
оборачиваем тегами (тут нет ни запросов ни сложения только шаблон желательно никаких яв скриптов или каскадных стилей ) представление данных на уровне php, модель на уровне javascript
PHP:
{foreach from=$dampitem key=k item=value}
            <div class="tt_content_worker_element">
                <div class="tt_content_worker_left_column">
                    <p align="center">...
 

PHProgress

Новичок
В общем - ладно...
Если AmdY - еще что-то посоветуете...
Буду рад...

А то - накинулись - нельзя, это не правильно...
Нельзя...

Есть однотипные задачи (вывести список сотрудников, картинок и прочее)...
У них у всех есть определенные условия (включен, выключен и прочее)

И писать каждый раз под них в шаблоне конструкцию mysql-select (ОДНОТИПНУЮ) из ~50 строк мне не удобно.
По этой причине и ищу способ решения задачи, как остановить шаблон если запрос прошел не верно...
 

PHProgress

Новичок
PHP:
	{mysql_exec
			
				type = SELECT 
				item = dampitem 
				table = tt_content_news 
				where = "pid = 3 and uid = `$smarty.get.tt_content_news.view_detail_record`" 
				addWhereSpecialFields = 1 
				field ="*" 
				
			}
			
			{if $dampitem|@count == 0}
		
				Записи по данному адресу не надены...
				{pageNotFoundAndExit}
			
			{/if}
Вот и решение проблемы...
+ Дополнительную логику можно применять и более гибко чем я хотел вставить ее в mysql-плагин. :)_
 

WMix

герр M:)ller
Партнер клуба
язык шаблонов на языке шаблонов для создания запроса.. ШШЗ

а главное читабельно!
 

keltanas

marty cats
WMix
Он программирует на шаблонизаторе, написанном на шаблонизаторе.
Теперь надо написать шаблонизатор на смарти, чтобы делать шаблоны для представления.
 

hell0w0rd

Продвинутый новичок
А можно узнать что у вас в контроллерах творится?:) вызов нужного шаблона?
 

PHProgress

Новичок
А можно узнать что у вас в контроллерах творится?:) вызов нужного шаблона?
Есть главный контроллер - он по умолчанию всегда идет один и тот-же - в который можно задать определенные настройки... По своей спицифике он имеет определенный стандарт (определенным образом сохраняется кэш, подключаются плагины: ссылки, 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)...

-
 
Сверху