Invalid method Freaks_Quotes_Block_Quote_Content::_forward

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
  • Тема закрыта
#1 SanyaGarik
  • Группа: Пользователь
  • Сообщений: 9
  • Регистрация: 13.01.2012

13.01.2012 19:09

Подскажите пожалуйста в чем проблема:
Написал в шаблоне
<?php $quote = $this->getQuote() ?>
<?php if ($quote->getStatus()==0)  $this->_forward('noRoute')  ?>
<?php if ($quote->getStatus()==1) {?>
	   <h1><?php echo Mage::helper('freaks_quotes')->__('View quote "%s"', $quote->getName()) ?></h1>
	   <h4><?php echo Mage::helper('freaks_quotes')->__('Quote`s id "%s"', $quote->getId()) ?></h4>
	   <h4><?php echo 'Quote`s status: "Yes"' ?></h4>
	   <p><?php echo '<img src="'.$quote->getImage().'" height="200"\>'; ?></p>
	   <h4><?php echo "Content:</h4>".$quote->getDscr() ?>

<?php } ?>

Выдает ошибку:
Invalid method Freaks_Quotes_Block_Quote_Content::_forward(Array
(
[0] => noRoute
)
)

В блоке у меня
<?php
class Freaks_Quotes_Block_Quote_Content extends Mage_Core_Block_Template
{
    protected function _construct()
    {
        $this->setTemplate('freaks/quotes/quote/view.phtml');
    }
    
    public function getQuote()
    {
        return Mage::getModel('freaks_quotes/quote')->load($this->getQuoteId());
    }
   
}

Возможно, надо добавить или перегрузить функцию _forward в Freaks_Quotes_Block_Quote_Content, как это можно сделать?

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

13.01.2012 19:12

_forward — это метод контроллера, а у блока такого метода нет.
Нельзя бездумно копировать код из одного места в другое и рассчитывать на его работоспособность.
Надо бы ещё и осмысливать, что копируемый код делает...

#3 SanyaGarik
  • Группа: Пользователь
  • Сообщений: 9
  • Регистрация: 13.01.2012

13.01.2012 19:49

Это я понимаю, но я не смог найти информацию как это сделать. Можно ли в блоке как-то перейти на action?
Например
<?php $quote = $this->getQuote() ?>
<?php if ($quote->getStatus()==1) {?>
	   <h1><?php echo Mage::helper('freaks_quotes')->__('View quote "%s"', $quote->getName()) ?></h1>
	   <h4><?php echo Mage::helper('freaks_quotes')->__('Quote`s id "%s"', $quote->getId()) ?></h4>
	   <h4><?php echo 'Quote`s status: "Yes"' ?></h4>
	   <p><?php echo '<img src="'.$quote->getImage().'" height="200"\>'; ?></p>
	   <h4><?php echo "Content:</h4>".$quote->getDscr() ?>

<?php } ?>
<?php if ($quote->getStatus()==0) {  "Тут переход на nofoundAction"  }?>

Как бы вы решали такую проблему?

#4 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

13.01.2012 19:51

Блоки предназначены для отображения информации и не предназначены для бизнес-логики.
Перенаправления надо делать в контроллере.

#5 SanyaGarik
  • Группа: Пользователь
  • Сообщений: 9
  • Регистрация: 13.01.2012

13.01.2012 19:57

написал
$quote_status = (int)$this->getRequest()->getParam('status');
     	if ($quote_status == 0) {
     		$this->_forward('noRoute');
     	}

, но теперь ошибка , Fatal error: Call to a member function setQuoteId() on a non-object in /usr/home/users/dev01/public_html/agornostaev/magento/app/code/local/Freaks/Quotes/controllers/IndexController.php on line 27
хотя я setQuoteId вообще не трогал:
     public function viewAction()
     {
     	$quote_status = (int)$this->getRequest()->getParam('status');
     	if ($quote_status == 0) {
     		$this->_forward('noRoute');
     	}
     	
         $quote_id = (int)$this->getRequest()->getParam('id');
         if (!$quote_id) {
             $this->_forward('noRoute');
         }
         
        
         
         $this->loadLayout();
         $this->getLayout()
            ->getBlock('quote.item')
            ->setQuoteId($quote_id);
         

        try {
            $this->renderLayout();
        } catch (Exception $e) {
            Mage::logException($e);
            $this->_forward('noRoute');
        }
     }


#6 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

13.01.2012 22:04

Да, многому ещё вам предстоит учиться.
Скажу лишь, что при "Call to a member function setQuoteId() on a non-object" смотреть надо (это очевидно любому нормальному программисту) не вызов setQuoteId, а предыдущий вызов, который вернул null.
Что-то далее комментировать тут бесполезно, тему закрываю.
Начните обучение Magento с более простых задач.

Поделиться темой: