[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Использование своего кода в SMARTY шаблонах
Игорь_Vasinsky
Вообщем по служебной надобности необходимо править шаблон.

Суть использовать свой php код в TPL
Либо инклудить свой файл php в TPL

Попытка 1. Инклуд

{include file='folder/file.php'} 

получил ошибку, что не могёт прочитать файл (файл есть)
Warning: Smarty error: unable to read resource: "folder/file.php" in
но по аналогии в другом месте - этот метод сработал


Попытка №2 Создание метки SMARTY

в index.php

$code; //мой php код

$smarty->new Smarty;
$smarty->assign('code', $code);


в шаблоне
{$code}


болт - не вывода, не нотисов

Попытка №3 Константы Smarty

$code; //мой php код
define('CODE',$code);


в шаблоне
{$smarty.const.CODE}

болт - не вывода, не нотисов

Попытка №4

{php}
echo или include - не работает - пустота (вывод ошибок включён)
{/php}


Вообщем 2 вопроса?

1. как мне решить сию задачу (и почему блин не работает 1 способ)
2. Нет не укого мыла разработчиков, хочу в масштабных объемах показать возможности русского языка и сказать "спасибо за хорошее воскресенье"

Первый вопрос имеет наибольший приоритет.



Спустя 23 минуты, 13 секунд (20.11.2011 - 19:35) Лена написал(а):
Так попробуйте. Прямо в шаблоне пропишите:

{php}
include('folder/file.php');
{/php}

Спустя 3 минуты, 34 секунды (20.11.2011 - 19:38) Игорь_Vasinsky написал(а):
а... забыл.

это 4й метод. Тоже не работает. Просто выводит код.

Спустя 10 минут, 37 секунд (20.11.2011 - 19:49) Лена написал(а):
А если не инклудить файл, а просто вывести:

{php}
echo "Не работает!!";
{/php}

Вообще-то мне кажется, что где-то в настройках самого Смарти что-то не включено для обработки php-кода. У Смарти есть дебаггер, который выводит причину ошибки на экран, я не помню, давно с ним работала, попробую найти.

Спустя 2 минуты, 5 секунд (20.11.2011 - 19:51) Игорь_Vasinsky написал(а):
Цитата
Вообще-то мне кажется, что где-то в настройках самого Смарти что-то не включено для обработки php-кода

ну эт я не шарю.

Кстати загнал:

{php}
echo "Не работает!!";
{/php}


ни чё не выводит..

Спустя 56 секунд (20.11.2011 - 19:52) Лена написал(а):
Попробуйте там, где у вас создается объект Смарти прописать такое:
$smarty->debugging = true;

Спустя 2 минуты, 18 секунд (20.11.2011 - 19:54) Игорь_Vasinsky написал(а):
добавил, и чё не изменилоь абсолютно. А как {php} - включить? не вкурсе случаем?

Спустя 9 минут (20.11.2011 - 20:03) Лена написал(а):
У меня никогда такого не было. php должен срабатывать по умолчанию.
Вот это у вас все определено?
/** Путь до Smarty */
define('SMARTY_DIR', '/smarty/');

/** Путь до Smarty шаблонов */
define('TEMPLATES', '/templates/');

/** Путь до Smarty компилированных шаблонов */
define('TEMPLATES_C', '/templates_c/');

require_once(SMARTY_DIR . 'Smarty.class.php');
$smarty = new Smarty;
$smarty->compile_check = TRUE;
$smarty->force_compile = TRUE;
$smarty->template_dir = TEMPLATES;
$smarty->compile_dir = TEMPLATES_C;

Расширение у файла tpl?
Не работает только в этом шаблоне?
Другие конструкции работают? Например, работает ли {literal}{/literal}
Может, там какая-то древняя версия смарти и можно класс этот заменить на более новый? Я бы полезла посмотрела в сам класс, как он обрабатывает php-теги.

Спустя 7 минут, 14 секунд (20.11.2011 - 20:11) Игорь_Vasinsky написал(а):
{literal} работает
{include file=""} работает в шаблонах админки, а здесь не видит файл

require_once('Site.class.php');

остального в индексе не вижу, но сайт давно работает на хостинге

Спустя 1 минута, 51 секунда (20.11.2011 - 20:12) Игорь_Vasinsky написал(а):
ух.. тут же класс смарти не подключён...

Да не подключён, а он нужен разве в индексе? шаблон стандартный для статических страниц

Спустя 5 минут, 25 секунд (20.11.2011 - 20:18) Лена написал(а):
Ну вы даете... НУжен, конечно. Я бы на вашем месте вообще б создала второй объект Смарти и работала только с ним.
$smarty2 = new Smarty;
$smarty2->template_dir = TEMPLATES;

Свою директорию укажите, куда складывать шаблоны будете.

Спустя 1 минута, 43 секунды (20.11.2011 - 20:20) Игорь_Vasinsky написал(а):
тогда я не понимаю как весь сайт работает? прекрасно всё выводиться, {} - обрабатывается.

Спустя 1 минута, 1 секунда (20.11.2011 - 20:21) Игорь_Vasinsky написал(а):
да мне не шаблоны подключать, я хочу свой php в шаблонах писать или просто подинклудить свой php в стандартный шаблон

Спустя 3 минуты, 18 секунд (20.11.2011 - 20:24) Лена написал(а):
Сделайте поиск по всем файлам сайта, забейте в поиск new Smarty - может, вы не там смотрите и объект смарти в другом файле создается.
Я поняла, что вам надо запихнуть php-код, я со смарти работала 1,5 года, с таким сталкиваюсь впервые. А вы уверены, что это вообще Смарти? А не другой шаблонизатор? Какой класс в этом файле - require_once('Site.class.php');?

Спустя 9 минут, 2 секунды (20.11.2011 - 20:33) Семён написал(а):
не учите его говнокодить!

Спустя 3 минуты, 45 секунд (20.11.2011 - 20:37) Игорь_Vasinsky написал(а):
это CMS Simple тут точняк смарти.

\www\Smarty\libs\Smarty.class.php присутствует, но я не вижу где его подключили.

Спустя 58 секунд (20.11.2011 - 20:38) Лена написал(а):
Семён
Товарищ "неговнокодер" не поняла, о чем вы.

Игорь_Vasinsky
Откройте Far manager, Alt + F7 - поиск.

Спустя 6 минут, 57 секунд (20.11.2011 - 20:45) Zerstoren написал(а):
Игорь_Vasinsky верни прошлую аву)
Тебя не узнать.

Спустя 1 минута, 31 секунда (20.11.2011 - 20:46) Guest написал(а):
На сколько помниться так и делалось: {php}include(fileName);{/php}.
Но!!! перед этим нужно почистить каталог compile (или что то наподобие) он складывает "скомпилированные"скрпты (кэшированный код) в этот каталог и использует его вместо шаблонов, для ускорения работы шаблонизатора.

Спустя 10 секунд (20.11.2011 - 20:46) Zerstoren написал(а):
xdebug спасет мир)

Подключишь и очень быстро найдешь где подрубается смарти)

Спустя 45 секунд (20.11.2011 - 20:47) Игорь_Vasinsky написал(а):
нашёл Widget.class.php в корне и всё... ну тупая CMS

содежимое класса

Свернутый текст
<?php

/**
* Simpla CMS
*
*
@copyright 2009 Denis Pikusov
*
@link http://simp.la
* @author Denis Pikusov
*
* Этот класс является базовым для всех классов.
* В нем происходит подключение к бд, и другие важные действия
*
*/


require_once('Config.class.php');
require_once('Database.class.php');
require_once('placeholder.php');
require_once('detect_browser.php');
require_once('Smarty/libs/Smarty.class.php');


class Widget
{
var $parent; // Родительский контейнер
var $params = array(); // get-параметры
var $title = null; // meta title
var $description = null; // meta description
var $keywords = null; // metakeywords
var $body = null; // содержимое блока

var $db; // база данных
var $smarty; // смарти
var $config; // конфиг (из конфиг-класса)
var $settings; // параметры сайта (из таблицы settings)
var $user; // пользователь, если залогинен
var $currency; // текущая валюта
var $gd_loaded = false; // подключена ли графическая библиотека
var $mobile_user = false; // подключена ли графическая библиотека

/**
*
* Конструктор
*
*/

function Widget(&$parent)
{
// если текущий блок входит в некий другой блок
if (is_object($parent))
{
// стырить у того все параметры
$this->parent=$parent;
$this->db=&$parent->db;
$this->smarty=&$parent->smarty;
$this->config=&$parent->config;
$this->params=&$parent->params;
$this->settings=&$parent->settings;
$this->user=&$parent->user;
$this->root_dir=&$parent->root_dir;
$this->root_url=&$parent->root_url;
$this->currency=&$parent->currency;
$this->main_currency=&$parent->main_currency;
$this->currencies=&$parent->currencies;
$this->gd_loaded=&$parent->gd_loaded;
}
else
{

// Читаем конфиг
$this->config = new Config();

// Мобильный браузер?
if(is_mobile_browser())
$this->mobile_user = true;

// Если установлены magic_quotes, убираем лишние слеши
if(get_magic_quotes_gpc())
{
$_POST = $this->stripslashes_recursive($_POST);
$_GET = $this->stripslashes_recursive($_GET);
}

// Подключаемся к базе данных
$this->db=new Database($this->config->dbname,$this->config->dbhost,
$this->config->dbuser,$this->config->dbpass);

if(!$this->db->connect())
{
print "Не могу подключиться к базе данных. Проверьте настройки подключения";
exit();
}
$this->db->query('SET NAMES utf8');

// Выбираем из базы настройки, которые задаются в разделе Настройки в панели управления
$query = 'SELECT name, value FROM settings';
$this->db->query($query);
$sts = $this->db->results();
foreach($sts as $s)
{
$name = $s->name;
$this->settings->$name = $s->value;
}

// Настраиваем смарти
$this->smarty = new Smarty();
$this->smarty->compile_check = true;
$this->smarty->caching = false;
$this->smarty->cache_lifetime = 0;
$this->smarty->debugging = false;
$this->smarty->security = true;
$this->smarty->secure_dir[] = 'admin/templates';

// Для мобильного клиента подменяем тему дизайна на мобильную
if($this->mobile_user)
{
$this->settings->theme = 'mobile';
$this->smarty->compile_dir = 'compiled/mobile';
}
else
{
$this->smarty->compile_dir = 'compiled';
}

$this->smarty->template_dir = $this->smarty->secure_dir[] = 'design/'.$this->settings->theme.'/html';

$this->smarty->config_dir = 'configs';
$this->smarty->cache_dir = 'cache';

$this->smarty->assign('settings', $this->settings);

// Проверка подключения графической библиотеки
if(extension_loaded('gd'))
$this->gd_loaded = true;
$this->smarty->assign('gd_loaded', $this->gd_loaded);

// Определяем корневую директорию сайта
$this->root_dir = str_replace(basename($_SERVER["PHP_SELF"]), '', $_SERVER["PHP_SELF"]);
$this->smarty->assign('root_dir', $this->root_dir);

// Корневой url сайта
$dir = trim(dirname($_SERVER['SCRIPT_NAME']));
$dir = str_replace("\\", '/', $dir);
$this->root_url = $_SERVER['HTTP_HOST'];
if($dir!='/')
$this->root_url = $this->root_url.$dir;
$this->smarty->assign('root_url', $this->root_url);

// Залогиниваем юзера
$this->user = null;
if(isset($_SESSION['user_email']) && isset($_SESSION['user_password']))
{
$email = $_SESSION['user_email'];
$password = $_SESSION['user_password'];
if(!empty($email) && !empty($password))
{
$query = sql_placeholder("SELECT users.*, groups.discount AS discount, groups.name AS group_name FROM users LEFT JOIN groups ON groups.group_id=users.group_id WHERE email=? AND password=? AND enabled=1", $email, $password);
$this->db->query($query);
$this->user = $this->db->result();
$this->smarty->assign('user', $this->user);
}
}


// Курсы валют
$query = "SELECT currency_id, name, sign, code, rate_from, rate_to, main, def FROM currencies ORDER BY currency_id";
$this->db->query($query);
$temp_currencies = $this->db->results();

foreach($temp_currencies as $currency)
{
$this->currencies[$currency->currency_id] = $currency;
if($currency->main)
$this->main_currency = $currency;
if($currency->def)
$this->default_currency = $currency;
}

if(isset($_POST['currency_id']))
{
$_SESSION['currency_id'] = intval($_POST['currency_id']);
}

if(isset($_SESSION['currency_id']))
{
$this->currency = $this->currencies[intval($_SESSION['currency_id'])];
}
else
{
$this->currency = $this->default_currency;
}

$this->smarty->assign('currencies', $this->currencies);
$this->smarty->assign('currency', $this->currency);
$this->smarty->assign('main_currency', $this->main_currency);



}
}


/**
*
* Отображение блока
*
*/

function fetch()
{
return $this->body="";
}

/**
*
* Рекурсивная уборка магических слешей
*
*/

function stripslashes_recursive($var)
{
$res = null;
if(is_array($var))
foreach($var as $k=>$v)
$res[stripcslashes($k)] = $this->stripslashes_recursive($v);
else
$res = stripcslashes($var);
return $res;
}


function param($name)
{
if(!empty($name))
{
if(isset($this->params[$name]))
return $this->params[$name];
elseif(isset($_GET[$name]))
return $_GET[$name];
}
return null;
}

/**
*
* Подмена параметра get
*
*/


function add_param($name)
{
if(!empty($name) && isset($_GET[$name]))
{
$this->params[$name] = $_GET[$name];
return true;
}
return false;
}

function url_filter($val)
{
$val = preg_replace('/[^A-zА-я0-9_\-\.\%\s]/ui', '', $val);
return $val;
}

function url_filtered_param($name)
{
return $this->url_filter($this->param($name));
}

function form_get($extra_params)
{
$copy=$this->params;
foreach($extra_params as $key=>$value)
{
if(!is_null($value))
{
$copy[$key]=$value;
}
}


$get='';
foreach($copy as $key=>$value)
{
if(strval($value)!="")
{
if(empty($get))
$get .= '?';
else
$get .= '&';
$get .= urlencode($key).'='.urlencode($value);
}
}

return $get;
}


function email($to, $subject, $message, $additional_headers='')
{
$site_name = "=?utf-8?B?".base64_encode($this->settings->site_name)."?=";

if(!empty($this->settings->notify_from_email))
$from = "$site_name <".$this->settings->notify_from_email.">";
else
$from = "$site_name <simpla@".$_SERVER['HTTP_HOST'].">";

$headers = "MIME-Version: 1.0\n" ;
$headers .= "Content-type: text/html; charset=utf-8; \r\n";
$headers .= "From: $from \r\n";

$subject = "=?utf-8?B?".base64_encode($subject)."?=";

@mail($to, $subject, $message, $headers);
}
}


?>


:D к тому же древняя как *** мамонта...

Спустя 2 минуты, 17 секунд (20.11.2011 - 20:49) Гость_Greg1978 написал(а):
Гыыы ....
Всегда умиляли такие комментарии
/**
*
* Конструктор
*
*/

function Widget(&$parent)
{


Ато не понятно что это конструктор, очень информативно.
Это к слову о обсуждавшейся теме кто и за сколько стал гуру.

Спустя 1 минута, 48 секунд (20.11.2011 - 20:51) Гость_Greg1978 написал(а):
Цитата (Игорь_Vasinsky @ 20.11.2011 - 17:47)
нашёл Widget.class.php в корне и всё... ну тупая CMS


Пипец говнокод во всей красе

Спустя 1 минута, 36 секунд (20.11.2011 - 20:53) Guest написал(а):
Хоть умудрился инкапсулировать отправку email в один метод ...

Спустя 1 минута, 37 секунд (20.11.2011 - 20:54) Игорь_Vasinsky написал(а):
так вот наш 2й программер пишет в для неё классы, ещё на php 4

лан. попробую с ним поработать, посмотрим что выдет.

Спустя 6 минут, 41 секунда (20.11.2011 - 21:01) Игорь_Vasinsky написал(а):
чистка кэша не сработала, подключение класса не помогло. да чтож такое.

Спустя 8 минут, 27 секунд (20.11.2011 - 21:09) Guest написал(а):
А если дебагером пройтись ... на чём ступор. Кстати и посмотреть было бы не плохо в кэше, сам скомпилированный файл, может они изменили включение кода?

Спустя 1 минута, 58 секунд (20.11.2011 - 21:11) Guest написал(а):
http://www.smarty.net/docsv2/ru/language.function.php.tpl
Стоит посмотреть может где то происходит ошибка, так как фактически он должен включить. Ошибка может быть до и после включения, вот и стоит через дебагер прогнать.

Спустя 54 секунды (20.11.2011 - 21:12) Игорь_Vasinsky написал(а):
Zerstoren
Цитата
Игорь_Vasinsky верни прошлую аву)
Тебя не узнать.

Я эту хотел, но как то не по понятиям..
Свернутый текст
user posted image


что последнее сказал.. не понял. папку compile или как там её - подчистил.

Понял. Ща гляну. Отпишусь.

Спустя 1 минута, 57 секунд (20.11.2011 - 21:14) Игорь_Vasinsky написал(а):
а.. это я читал, работает в этой симпле...

Спустя 4 минуты, 25 секунд (20.11.2011 - 21:19) Игорь_Vasinsky написал(а):
В индексе
require_once('Smarty/libs/Smarty.class.php');
require_once('Site.class.php');

$smarty2 = new Smarty;
$smarty2->debugging = true;

$var = "Yooooooooooooooooo!!!";

$smarty2->assign('var', $var);


В шаблоне

{$var}

Ни каких эмоций.

Спустя 9 минут, 32 секунды (20.11.2011 - 21:28) Guest написал(а):
<h2>тестовая статическая строка</h2>
{$var}</br>
{* отображает серверную переменную "SERVER_NAME" ($_SERVER['SERVER_NAME'])*}
{
$smarty.server.SERVER_NAME}


Что выводит вот такой код.

Спустя 2 минуты, 57 секунд (20.11.2011 - 21:31) Игорь_Vasinsky написал(а):
тестовая статическая строка

домен мой


Так он в {* *} - работает теперь?

Спустя 3 минуты, 32 секунды (20.11.2011 - 21:35) Игорь_Vasinsky написал(а):
аа. это коммент.

но константа сработала. А чё мои то не работают...

Спустя 47 секунд (20.11.2011 - 21:36) Guest написал(а):
Кстати можно запретить кэширование во время отладки, и dhexte. выводить шаблон сразу после присвавания:

require_once('Smarty/libs/Smarty.class.php');
require_once('Site.class.php');

$smarty2 = new Smarty;
$smarty2->debugging = true;
$smarty->caching = false;

$var = "Yooooooooooooooooo!!!";

$smarty2->assign('var', $var);
$smarty2->display(templateName);

Спустя 1 минута, 28 секунд (20.11.2011 - 21:37) Guest написал(а):
Может стоит не использовать зарезервированные слова (var) попробовать другое имя. Возможно где то конфликт.

Спустя 2 минуты, 39 секунд (20.11.2011 - 21:40) Guest написал(а):
Просто при компиляции строка "var" как то конфликтует

Спустя 2 минуты, 30 секунд (20.11.2011 - 21:42) Игорь_Vasinsky написал(а):
стоп... ща


index.php

$smarty2 = new Smarty;
$smarty2->debugging = true;
$smarty->caching = false;

define('MY_CONST', 'Yoooooooooooooo');

$my_var = "Yooooooooooooooooo!!!";

$smarty2->assign('my_var', $my_var);


шаблон

{$smarty.const.MY_CONST}
{
$my_var}



чисто всё.... пустота.

Спустя 4 минуты, 47 секунд (20.11.2011 - 21:47) Игорь_Vasinsky написал(а):
И почему

{include file='folder/file.php'} - говорит что не может прочитать его, типа нету...

Спустя 7 минут, 22 секунды (20.11.2011 - 21:54) Guest написал(а):
Цитата
Тэги {include} используются для включения других шаблонов в текущий. Любые переменные, доступные в текущем шаблоне, доступны и во включаемом. Тэг {include} должен иметь атрибут 'file', который указывает путь к ресурсу шаблона.

Опциональный атрибут assign указывает, что результат выполнения {include} будет присвоен переменной вместо отображения.

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


Шаблона а не php, *.tpl а не *.php

Спустя 3 минуты, 26 секунд (20.11.2011 - 21:58) Игорь_Vasinsky написал(а):
Я различаю шаблоны и php ;)

:D :D :D :D


Свернутый текст
    var $security_settings  = array(
'PHP_HANDLING' => false,
'IF_FUNCS' => array('array', 'list',
'isset', 'empty',
'count', 'sizeof',
'in_array', 'is_array',
'true', 'false', 'null'),
'INCLUDE_ANY' => false,
'PHP_TAGS' => true,
'MODIFIER_FUNCS' => array('count'),
'ALLOW_CONSTANTS' => true,
'ALLOW_SUPER_GLOBALS' => true
);


включил {php} и константы Smarty в классе .. усё работает, случайно наткнулся на пост одного видимо умного человека. Изменил конфиг и ОК. Всем спасибо за внимание. Гости - кто Вы?

Спустя 2 минуты, 7 секунд (20.11.2011 - 22:00) Игорь_Vasinsky написал(а):
теперь бы вспомнить для чё это нужно было biggrin.gif biggrin.gif biggrin.gif biggrin.gif biggrin.gif что то по работе laugh.gif


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

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