Piotr Majowicz

Piotr Majowicz Software Engineer

Temat: ZF + Smarty - problem do rozwiązania

Czytając sobie to forum napotkałem się na ciekawy problem, może ktoś pomoże rozwiązać:

<?php echo $category->getItem($i)->getName(); ?}


jak to zrobić na smartach? oczywiście nie interesuje mnie rozwiązanie

{assign var=tmp value=$category->getItem($i)}
{$tmp->getName()}



Czy jest jakikolwiek sposób poradzenia sobie z tym na smartach, żeby wywołania typu: $ob->getSomething($i)->getSElse($j)->getAttr($k)->getValue() można było łączyć jak w normalnym PHP bez assign-ów? Czy da się to wogóle zrobić? przyjemnie byłoby ujrzeć coś takiego (oczywiście gdyby to działało):
{$ob->getSomething($i)->getSElse($j)->getAttr($k)->getValue()}

konto usunięte

Temat: ZF + Smarty - problem do rozwiązania

Piotr Majowicz:
Czytając sobie to forum napotkałem się na ciekawy problem, może ktoś pomoże rozwiązać:
>[ciach]
{$ob->getSomething($i)->getSElse($j)->getAttr($k)->getValue()}

W Smarty 2 z tego co pamiętam nie ma takiej możliwości...

Za Smarty 3 się jeszcze nie zabrałem (miałem problem z integracją z ZF a nie chciało mi się rozkminiać tego problemu), więc najlepiej jak zerkniesz w dokumentację...Piotr Lewandowski edytował(a) ten post dnia 07.06.10 o godzinie 15:19
Piotr Majowicz

Piotr Majowicz Software Engineer

Temat: ZF + Smarty - problem do rozwiązania

Dzięki, smarty 3 i ZF udało mi się połączyć, rozwiązałem przez to jakiś problem, ale pokazał się inny, przestały działać modyfikatory (niestety nie zdążyłem przetestować tego problemu powyżej, a rezultat padł razem z moim poprzednim dyskiem twardym). Do tej pory w samrty 3 się nie bawiłem, bo nie chciałem testować wersji Beta. Może za jakiś czas o tym pomyślę.
Rafał Nauka

Rafał Nauka Software Engineer
(Java)

Temat: ZF + Smarty - problem do rozwiązania

mam cos podobnego i dziala. uzywam smarty 3 rc1.. modyfikatory tez dzialaja dodatkowo mam podpiete helpery widoku zenda... co do modyfikatorow to trzeba mu ustawic sciezke. Nie wiem dlaczego nie robi do sam... no ale coz... do podpiecia helperow zenda musialem napisac kilka klas ktore nadpisuja klasy smarty. Ciezko byloby mi tu to wszystko wrzucic skontaktuj sie na priv to Ci wysle na maila. Jakbym mial chwile czasu to napisalbym tutka bo chwile sie z tym meczylem.... moze kiedys znajde czas.

konto usunięte

Temat: ZF + Smarty - problem do rozwiązania

To pochwalcie się swoimi rozwiązaniami, tak, żebyśmy nie musieli już męczyć swoich mózgownic :D

konto usunięte

Temat: ZF + Smarty - problem do rozwiązania

{$category->getItem($i)->getName()}
Michał Ćwikliński edytował(a) ten post dnia 22.06.10 o godzinie 14:22
Rafał Nauka

Rafał Nauka Software Engineer
(Java)

Temat: ZF + Smarty - problem do rozwiązania

Bootstrap:

$view = new Cms_View_Smarty(array(
'scriptPath' => realpath(APPLICATION_PATH.'/modules/'),
'params' => array(
'plugins_dir' => array(realpath(APPLICATION_PATH.'/../library/Smarty/plugins')),
'compile_dir' => APPLICATION_PATH.'/cache/smarty'
),
'helperDirs' => array(
'Cms/View/Helper' => 'Cms_View_Helper_',
'Zend/View/Helper' => 'Zend_View_Helper_'
)
));

// View Renderer
Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer')
->setViewScriptPathSpec(':module/views/scripts/:controller/:action.:suffix')
->setViewSuffix('tpl')
->setView($view);

// Zend Layout
$view->addScriptPath(APPLICATION_PATH);
$view->layout = Zend_Layout::startMvc(array(
'inflectorTarget' => 'layouts/:script.:suffix',
'layout' => 'default',
'viewSuffix' => 'tpl'
))->setView($view);
Rafał Nauka

Rafał Nauka Software Engineer
(Java)

Temat: ZF + Smarty - problem do rozwiązania

Cms_Smarty
<?php
include_once('Smarty/Smarty.class.php');

class Cms_Smarty extends Smarty
{
/**
* Obiekt widoku
*
* @var Zend_View_Abstract
*/
protected $_zendView = null;

/**
* Konstruktor
*
*/
public function __construct()
{
parent::__construct();

$this->template_class= 'Cms_Smarty_Template';
}

/**
* Ustawienie widoku
*
* @param Zend_View_Abstract $view obiekt widoku
*/
public function setZendView(Zend_View_Abstract $view)
{
$this->_zendView = $view;
}

/**
* Pobranie widoku
*
* @param Zend_View_Abstract obiekt widoku
*/
public function getZendView()
{
return $this->_zendView;
}
}
Rafał Nauka

Rafał Nauka Software Engineer
(Java)

Temat: ZF + Smarty - problem do rozwiązania

Cms_Smarty_Compiler
<?php

class Cms_Smarty_Compiler extends Smarty_Internal_SmartyTemplateCompiler
{ function callTagCompiler($tag, $args, $param1 = null, $param2 = null, $param3 = null)
{
if (!($return= parent::callTagCompiler($tag, $args, $param1, $param2, $param3)))
{
try
{
$plugin= $this->smarty->getZendView()->getHelper($tag);
}
catch (Zend_Loader_PluginLoader_Exception $e)
{
return false;
}
return "<?php echo \$_smarty_tpl->smarty->getZendView()->".$tag."(".implode(',', $args).");?>";
}
return $return;
}
}
Rafał Nauka

Rafał Nauka Software Engineer
(Java)

Temat: ZF + Smarty - problem do rozwiązania

<?php
require_once('Cms/Smarty/Compiler.php');

class Cms_Smarty_Template extends Smarty_Internal_Template
{
function __construct($template_resource, $smarty, $_parent = null, $_cache_id = null, $_compile_id = null, $_caching = null, $_cache_lifetime = null)
{
parent::__construct($template_resource, $smarty, $_parent, $_cache_id, $_compile_id, $_caching, $_cache_lifetime);
$this->resource_object->compiler_class= 'Cms_Smarty_Compiler';
}
}
Rafał Nauka

Rafał Nauka Software Engineer
(Java)

Temat: ZF + Smarty - problem do rozwiązania

wersja zenda 1.10 i smarty 3 rc1. Na tej wersji Smarty powinno to dzialac to co chcesz zrobic.
Rafał Nauka

Rafał Nauka Software Engineer
(Java)

Temat: ZF + Smarty - problem do rozwiązania

i jeszcze jedna
<?php

/**
* Smarty View Class
*
*/
class Cms_View_Smarty extends Zend_View_Abstract
{
/**
* Obiekt Smarty
*
* @var My_Smarty
*/
protected $_smarty = null;

/**
* Konstruktor
*
* @param array $config dane konfiguracyjne
*/
public function __construct($config = array())
{
$this->_smarty = new Cms_Smarty();
$this->_smarty->setZendView($this);

foreach ($config['params'] as $key => $value) {
$this->_smarty->$key = $value;
}

$this->setScriptPath($config['scriptPath']);

// Ścieżki do helperów
foreach ($config['helperDirs'] as $path => $prefix) {
$this->addHelperPath($path, $prefix);
}
}

/**
* Zwraca obiekt Smarty
*
* @return My_Smarty
*/
public function getEngine()
{
return $this->_smarty;
}

/**
* Ustawia ścieżkę do szablonów
*
* @param string $path ścieżka
*/
public function setScriptPath($path)
{
if (null === $path) {
return;
}

$this->_smarty->template_dir = rtrim($path, '/').'/';
}

/**
* Pobiera ścieżki do szablonów
*
* @return array tablica ścieżek
*/
// public function getScriptPaths() {
// return array($this->getScriptPath(null));
// }

/**
* Zwraca ściezkę do plików tpl
*
* @return string ścieżka
*/
public function getScriptPath($name) {
return $this->_smarty->template_dir;
}

/**
* Ustawienie parametru
*
* @param string $key klucz
* @param mixed $value wartość
*/
public function setParam($key, $value)
{
$this->_smarty->$key = $value;
}

/**
* Ustawia zmienną w widoku
*
* @param string $key nazwa zmiennej
* @param mixed $value wartość zmiennej
*/
public function __set($key, $value)
{
$this->_smarty->assign($key, $value);
}

/**
* Pobiera zmienną z widoku
*
* @param string $key nazwa zmiennej
* @return mixed wartość zmiennej
*/
public function __get($key)
{
return $this->_smarty->getVariable($key)->value;
}

/**
* Sprawdzenie czy zmienna jest ustawiona w widoku
*
* @param string $key nazwa zmiennej
* @return boolean czy zmienna jest ustawiona
*/
public function __isset($key)
{
return null === $this->_smarty->getVariable($key);
}

/**
* Usunięcie zmiennej z widoku
*
* @param string $key nazwa zmiennej
*/
public function __unset($key)
{
$this->_smarty->clearAssign($key);
}

/**
* Przypisywanie zmiennych do widoku
*
* @param string|array $var nazwa zmiennej lucz tablica par (klucz => wartość)
* @param mixed $value wartość zmiennej
*/
public function assign($var, $value = null)
{
if (is_array($var)) {
$this->_smarty->assign($var);
return;
}

$this->_smarty->assign($var, $value);
}


/**
* Usunięcie wszystkich przypisanych do widoku zmiennych
*/
public function clearVars()
{
$this->_smarty->clearAllAssign();
}

/**
* Renderowanie szablonu
*
* @param string $name nazwa szablonu
* @return string wyrenderowany szablon
*/
public function render($name)
{
if (file_exists($this->getScriptPath($name) . $name)) {
return $this->_smarty->fetch($name);
}
foreach ($this->getScriptPaths() as $path)
if (file_exists($path . $name))
{
return $this->_smarty->fetch($path.$name);
}
}

/**
* Rozszerzenie abstrakcyjnej metody klasy nadrzędnej
*/
protected function _run()
{
}
function __clone()
{
$this->_smarty= clone $this->_smarty;
}
function getVars()
{
return $this->_smarty->getTemplateVars();
}
}

Następna dyskusja:

Zend_DB PDO dziwny problem




Wyślij zaproszenie do