Назначение переменной из php класса (Smarty)

x2com

Новичок
Назначение переменной из php класса (Smarty)

Вопрос такой. Я использую такой класс для вывода сообщений:
PHP:
class ForSmarty{
	var $_smarty=null;
function ForSmarty(&$smarty){$this->_smarty = $smarty ;}

//	Вывод ошибок и сообщений
function message($etype, $emark, $emess='', $color=''){
	if(!empty($color))
		if($color=='red'){$color='#FF0000';}
		 elseif($color=='green'){$color='#00CC33';}
		 elseif($color=='blue'){$color='#3333FF';}
		$this->_smarty->assign('errorcolor', $color);
	if($etype==0){
		$this->_smarty->assign('mess', $emess);
	}
	elseif($etype==403){
		header("HTTP/1.1 403 Forbidden");
		$this->_smarty->assign('errorblock', $etype);
		$this->_smarty->assign('emark', $emark);
		$this->_smarty->assign('emess', $emess);
	}
	elseif($etype==404){
		header("HTTP/1.1 404 Not Found");
		$this->_smarty->assign('errorblock', $etype);
		$this->_smarty->assign('emark', $emark);
		$this->_smarty->assign('emess', $emess);
	}
	else{
		$this->_smarty->assign('errorblock', $etype);
		$this->_smarty->assign('emark', $emark);
		$this->_smarty->assign('emess', $emess);
	}
}
// ниже еще фенкции использующие smarty
}
В php коде, где требуется вызывается объект, для передачи сообщения в шаблон
PHP:
$funcs->message(0, '', 'Ошибка......!', 'red');
На моём серваке и на локалке (php 5.0.5) всё в порядке, выводится нужное сообщение. Поставил скрипт на сторонний сервак (php 4.3.8 WinNT) и переменные $etype, $emark, $mess, $emess перестали видеться в шаблоне.
Подскажитье, плиз, что за беда и как вылечить можно.
Заранее спасибо!
 

jonjonson

Охренеть
x2com, проблемы искать конечно через просмотр ошибок и проверку значений, но вот тот кусок кода, что предоставлен я решил слегка отрефакторить...
PHP:
class ForSmarty
{
    var $_smarty=null;
    var $colorsMapping = array(
              'default' => '#114477',
              'red'     => '#FF0000',
              'green'   => '#00CC33',
              'blue'    => '#3333FF',
          );
    var $errorHeaders = array(
              403 => "HTTP/1.1 403 Forbidden",
              404 => "HTTP/1.1 404 Not Found",
          );
    
    function ForSmarty (&$smarty) 
    {
        $this->_smarty = $smarty ;
    }

    function message ($etype, $emark, $emess='', $color='')
    {
        $this->setHeader($etype);

        $this->_smarty->assign('errorcolor', $this->getErrorCollor($color));

        if (0 == $etype) { // Накуя? Так было...
            $this->_smarty->assign('mess', $emess);
        } else {
            $this->_smarty->assign('emess', $emess);
        }
        $this->_smarty->assign('errorblock', $etype);
        $this->_smarty->assign('emark', $emark);
    }

    function getErrorCollor($virtualColor)
    {
        if (array_key_exists($virtualColor, $this->collorsMapping)) {
            return $this->colorsMapping[$virtualColor];
        }
        return $this->colorsMapping['default'];
    }

    function setHeader($errorType)
    {
        if (array_key_exists($errorType, $this->errorHeaders)) {
            header($this->errorHeaders[$errorType]); // Здесь не всё однозначно...
        }
    }
    // ниже еще инфекции использующие smarty
}
 

x2com

Новичок
jonjonson, спасибо за корректировки.
Но в принципе такой класс должен передавать в смартю переменные через $this->_smarty->assign(); ? Явные косяки есть на Ваш взгляд?
StUV, jonjonson, а в плане дебага Вы имеете в виду смартёвый дебаг или какой? )
 

jonjonson

Охренеть
x2com, дебаг в данном случае, это разбор собственного кода, когда включён вывод всех ошибок и идёт построчная проверка всей цепочки вызовов. Кроме вас этого со скриптом никто не сделает.
 

x2com

Новичок
Из сообщений от php только некоторые нотисы, но ничего криминального...
В общем всем спасибо за советы, буду код ковырять...
 
Сверху