[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Принцип работы SMARTY
Страницы: 1, 2
Kapitan79
Всем привет!

Взялся тут поправить сайт, написанный с использованием SMARTY (Ну и заодно разобраться в нём решил).

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

Что смущает.

Весь сайт состоит из классов. Существует ключевой класс core.php который инициализирует smarty. Но нет собственно обычных php файлов которые бы эти классы использовали! Я новичок, и возможно что то не понимаю, но в моём представлении классы являются библиотеками функций и не более. Должен быть "центральный" скрипт который их по мере необходимости задействует и реализует основную логику.

Подскажите пожалуйста, в smarty всё должно работать так как я описал или там есть какой то оригинальный механизм?
Или возможно оригинал я и чего то не понимаю... blink.gif
Valick
Цитата
но в моём представлении классы являются библиотеками функций и не более

нет, как раз ООП это нечто большее чем функции в классах.

smarty - это больше чем шаблонизатор, это язык программирования написанный на РНР. Ключевая идея smarty, это то что шаблон транслируется в РНР код один раз, до тех пор пока не изменится шаблон.

_____________
Стимулятор ~yoomoney - 41001303250491
Kapitan79
Боюсь яснее не стало.
Хотелось бы понять схему работы. Пусть самую принципиальную.

Вот пример того что меня ставит в тупик.

<form action="parts.php" method="POST" enctype="multipart/form-data">
<td
class="reg" width="411" align="left" valign="middle" nowrap><h4>  г.Краснодар +7(861)240-04-44     

<a href="#" class="callme_viewform" style="color:#FFFF33; font-size:15px;
text-decoration: none;
border-bottom: 1px dashed #FFFF33;"
>Заказать звонок</a>

<br>

  пн-чт.: 09:00-19:00, пт.: 09:00-18:00,
сб.: 09:00-17:00</h4><br>


<i>
  Код детали: </i>  <input class="reg" name="piece_name" type="text" value="{$piece_name|default:'111'}" size=20>  <input name="log_piece" type="submit" value="поиск" class="reg"><br> </td>
</form>


Казалось бы всё более менее ясно. Вводится некая информация и через POST передаётся в обработчик, расположенный в parts.php.

Но в parts.php описан класс, состоящий из множества функций. Да, в некоторых из них встречается упоминание о переменной $this->post ['piece_name'], но ведь для того чтобы до них добраться надо запустить функцию, в которой они находятся! А что её запускает абсолютно не понятно
bestxp
Скорее всего тот класс в котором $this->post унаследован еще от одного в котором и есть описанные методы в которых и передается в шаблон, что то типа render() и тд
но это уже не сматри сам движек той системы
Kapitan79
Такой вопрос по теме возник.

Пытаюсь отредактировать шаблон. В переменную $coupon_array выводится результат SQL запроса в виде массива:

Array ( [0] => stdClass Object ( [id] => 11 [code] => THANKYOU [value] => 5.00 [type] => absolute [expire] => 2015-06-01 00:00:00 [min_order_price] => 50000.00 [single] => 1 [usages] => 0 ) [1] => stdClass Object ( [id] => 15 [code] => SIMPLACMS [value] => 10.00 [type] => absolute [expire] => [min_order_price] => 150000.00 [single] => 0 [usages] => 0 ) [2] => stdClass Object ( [id] => 17 [code] => TESTCOUPON [value] => 0.10 [type] => percentage [expire] => 2010-06-01 00:00:00 [min_order_price] => 0.00 [single] => 0 [usages] => 0 ) )

Пытаюсь показать поле code следующим образом:

{section name=pp loop=count($coupon_array)}
{
$coupon_array[pp].code}
{
/section}


Почему ничего не выводится?
Kapitan79
Разобрался.
Косяк в документации к смарти.

Нужно писать {$coupon_array[pp]->code}
AllesKlar
Kapitan79
Нет никакого косяка. Вернее, он может и есть, но точно не в документации Смарти :)

$var->a  // свойство объекта
$var[$a] //элемент массива $var с числовым индексом a
$var.a //элемент ассоциативного массива $var с индексом a


_____________
[продано копирайтерам]
Kapitan79
Тогда понятно.

Результат запроса отображался как массив объектов.
AllesKlar
Kapitan79
Да, именно. Массив объектов - это стандартная вещь для шаблонизатора.

Нужно на странице вывались список.
Элемент списка - это объект.
Поля у элемента списка - это свойства объекта.

Все вместе заворачиваем в массив и отправляем в шаблон.
В шаблоне бежим по массиву и генерируем элементы списка.

_____________
[продано копирайтерам]
zelenuy
Я не когда не пользовался смарти, можете сказать какой плюс эта технология дает, в чем преимущество ?
Kapitan79
Идея в том, чтобы не засорять HTML код вставками логики PHP скрипта.

Вместо этого в HTML вставляют только результат работы этих скриптов в виде {переменная из php скрипта}, а вся обработка происходит в отдельном PHP файле, обслуживающем данный шаблон.

Ну и в шаблоне возможна реализация простейшей логики вроде циклов, которая как в моём примере обрабатывает например массив.
Kapitan79
Я тоже только начинаю в этом разбираться. По ощущениям человека читающего чужой код это геморой. wink.gif Но возможно всё зависит в известной степени от кода и от количества знаний читающего blink.gif
zelenuy
Kapitan79
Я для таких вещей делаю функцию с любыми циклами, а в html просто сую вызов функции типа
<p><?foo()?></p>

вроде выглядит нормально не засоряя сам html :rolleyes: а вы как считаете ?
Kapitan79
Возможно.

Но вся беда в том, что мне регулярно приходится переделывать чужие сайты содержащие smarty.

Собственно из за этого я и заморочился.
zelenuy
Мне поди тоже придется эту чту-ку посмотреть хотя бы поверхностно wink.gif вот бы придумали как вообще отделить html от php без всяких вставок)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.