Подскажите, пожалуйста, как отобразить 404 страницу в такой ситуации:
Есть 2 типа товаров: co статусом Yes и со статусом No. Мне нужно, что бы при обращении
к товару со статусом No через id ( magento/index.php/quotes/index/view/id/4/ ), выводилась 404 страница (при этом сам товар в базе существует)
Как перенаправить посетителя на страницу 404?
13.01.2012 18:04
Это поле у товаров в моем модуле, наряду с id и описанием, вот show create моей таблицы:
CREATE TABLE `freaks_quotes` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(128) default NULL,
`dscr` text,
`image` varchar(128) default NULL,
`status` smallint(1) default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
В поле статус находится либо 1 либо 0 (я собираюсь использовать это поле чтоб показать, доступен товар или нет)
CREATE TABLE `freaks_quotes` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(128) default NULL,
`dscr` text,
`image` varchar(128) default NULL,
`status` smallint(1) default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
В поле статус находится либо 1 либо 0 (я собираюсь использовать это поле чтоб показать, доступен товар или нет)
13.01.2012 18:08
Контроллер quotes — не стандартный, а ваш, вот и обрабатывайте запрос, как хотите. В чём проблема-то?
13.01.2012 18:10
у меня там на viewAction написана такая функция:
public function viewAction()
{
$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');
}
}
Не могу понять, как в нее встроить if который проверяет статус, и как из контроллера отобразить 404 страницу?
public function viewAction()
{
$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');
}
}
Не могу понять, как в нее встроить if который проверяет статус, и как из контроллера отобразить 404 страницу?
13.01.2012 18:14
Значит, код писали не аы, а вы его скопировали и даже не понимаете, что там написано.
$this->_forward('noRoute');— это и есть перенаправление посетителя на системную страницу-заглушку в случае отсутствия в системе запрашиваемой посетителем страницы.
13.01.2012 18:18
Да, но если перед ним вставить
$quote = $this->getQuote();
if ($quote->getStatus()==1) $this->_forward('noRoute');
То не работает, возможно я не правильно пытаюсь получить информацию о Quote- "$quote = $this->getQuote()"?
$quote = $this->getQuote();
if ($quote->getStatus()==1) $this->_forward('noRoute');
То не работает, возможно я не правильно пытаюсь получить информацию о Quote- "$quote = $this->getQuote()"?
13.01.2012 18:20
Какое отношение имеет программный код
$quote = $this->getQuote();к задаче «перенаправить посетителя на страницу 404»?
13.01.2012 18:26
Для того чтобы при вводе адреса, например, magento/index.php/quotes/index/view/id/4/ , проверялась quote с id= 4, определялся ее статус, и если он равен 0, то происходило
В шаблоне у меня
$this->_forward('noRoute');
$quote = $this->getQuote();я использовал, т.к. не знаю как извлечь данные о quote, сделал по аналогии с шаблоном.
В шаблоне у меня
<?php $quote = $this->getQuote() ?> <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 if ($quote->getStatus()==1) echo "Quote`s status: \"Yes\""; elseif ($quote->getStatus()==0) echo "Quote`s status: No"; ?></h4> <p><?php echo '<img src="'.$quote->getImage().'" height="200"\>'; ?></p> <h4><?php echo "Content:</h4>".$quote->getDscr() ?>
13.01.2012 18:28
Одна тема — один вопрос.
Как перенаправить посетителя на страницу 404 — я ответил.
Другие свои проблемы в эту тему мешать не надо.
Как перенаправить посетителя на страницу 404 — я ответил.
Другие свои проблемы в эту тему мешать не надо.