Список статей и страница статьи
Для вывода данных Magento использует классы блоков (мы уже использовали блоки в админке такие как Grid, Edit ...). В блок переносится бизнес-логика и этот блок можно будет использовать в разных частях страницы. Контроллер только инициализирует нужный блок.
Для вывода информации, нам нужно будет создать:
- класс блока для вывода списка статей
- класс блока для вывода страницы статьи
- создать xml файл лайаута в шаблоне
- добавить в настройки модуля информацию о блоках
- добавить функционал вывода блоков в контроллер
- создать шаблон для списка статей
- создать шаблон для страницы статьи
Создаем блок для вывода списка статей
Класс реализует функционал возвращающий коллекцию записей.
Для этого нам нужно создать файл:
app/code/local/My/Articles/Block/Articles.php
Добавляем код:
<?php class My_Articles_Block_Articles extends Mage_Core_Block_Template { public function getArticlesCollection() { $collection = Mage::getModel("myarticles/articles")->getCollection(); $collection->setOrder('created', 'DESC'); return $collection; } }
Создаем класс для вывода страницы статьи
Создаем файл:
app/code/local/My/Articles/Block/View.php
и добавляем код:
<?php class My_Articles_Block_View extends Mage_Core_Block_Template { }
Создаем xml файл лайаута в шаблоне
В каталоге вашей темы (у меня: design/frontend/default/default), создаем каталог (если такого нет):
design/frontend/default/default/layout
и файл:
design/frontend/default/default/layout/my_articles.xml
Добавляем код:
<layout> <marticles_index_index> <reference name="content"> <block type="my_articles_block/articles" template="my_articles/index.phtml" /> </reference> </marticles_index_index> <marticles_index_view> <reference name="content"> <block type="my_articles_block/articles" name="my_articles.content" template="my_articles/view.phtml" /> </reference> </marticles_index_view> </layout>
Добавляем в настройки модуля информацию о блоках
В файле настройки нашего модуля (app/code/local/My/Articles/etc/config.xml)
Тут мы добавляем параметры (см. комментарии):
- Данные для лайаута
- Данные для лайаута нашего модуля
добавляем код:
<?xml version="1.0" ?> <config> <modules> <My_Articles> <version>1.0.0</version> </My_Articles> </modules> <frontend> <!-- Данные для лайаута --> <layout> <updates> <!-- Данные для лайаута нашего модуля --> <my_articles_block> <file>my_articles.xml</file> </my_articles_block> </updates> </layout> <routers> <marticles> <use>standard</use> <args> <module>My_Articles</module> <frontName>articles</frontName> </args> </marticles> </routers> </frontend> <global> <!-- Код для моделей --> <models> <myarticles> <!-- Мы создали класс My_Articles_Model_Articles, в этом параметре, мы указываем только путь к файлу My_Articles_Model без имени файла Articles --> <class>My_Articles_Model</class> <resourceModel>myarticles_recource</resourceModel> </myarticles> <!-- Код для ресурсов модели --> <myarticles_recource> <class>My_Articles_Model_Resource</class> <entities> <table_myarticles> <table>my_articles</table> </table_myarticles> </entities> </myarticles_recource> </models> <resources> <My_Articels_marticles_setup> <setup> <module>My_Articles</module> </setup> </My_Articels_marticles_setup> </resources> <!-- Код для блока --> <blocks> <my_articles_block> <class>My_Articles_Block</class> </my_articles_block> </blocks> <!-- Код для хелпера --> <helpers> <myarticles> <class>My_Articles_Helper</class> </myarticles> </helpers> </global> <!-- Код для админки --> <admin> <routers> <myarticles_admin> <use>admin</use> <args> <module>My_Articles</module> <frontName>myarticles_admin</frontName> </args> </myarticles_admin> </routers> </admin> <!-- Код для меню админки --> <adminhtml> <menu> <myarticles module="myarticles"> <title>My Articles</title> <sort_order>77</sort_order> <action>myarticles_admin/adminhtml_articles</action> </myarticles> </menu> </adminhtml> </config>
Добавляем функционал вывода блоков в контроллер
Открываем файл:
app/code/local/My/Articles/controllers/IndexController.php
Добавляем код:
<?php class My_Articles_IndexController extends Mage_Core_Controller_Front_Action { public function indexAction() { $this->loadLayout(); $this->renderLayout(); } public function viewAction() { $id = Mage::app()->getRequest()->getParam('id', 0); $articles = Mage::getModel('myarticles/articles')->load($id); if ($articles->getId() > 0) { $this->loadLayout(); $this->getLayout()->getBlock('my_articles.content')->assign(array( "item" => $articles, )); $this->renderLayout(); } else { $this->_forward('noRoute'); } } }
Создаем шаблон для списка статей.
В каталоге вашей темы (у меня: design/frontend/default/default), создаем каталог (если его нет):
design/frontend/default/default/template
и
design/frontend/default/default/template/my_articles
Создаем файл:
design/frontend/default/default/template/my_articles/index.phtml
Добавляем код:
<?php $items = $this->getArticlesCollection(); $articleViewUrl = Mage::getUrl('articles/index/view'); $helper = Mage::helper('myarticles'); ?> <h1>Articles</h1> <?php foreach ($items as $item): ?> <div> <div> <a href="<?php echo $articleViewUrl; ?>?id=<?php echo $item->getId(); ?>" title="<?php echo $item->getHeader(); ?>"> <?php echo $item->getHeader(); ?> </a> </div> <div style="float: left; width: 100px;"> <?php if (is_file($helper->getImagePath($item->getId()))): ?> <a href="<?php echo $articleViewUrl; ?>?id=<?php echo $item->getId(); ?>" title="<?php echo $item->getHeader(); ?>"> <img alt="<?php echo $item->getHeader(); ?>" style="width: 90px; height: 90px;" src="<?php echo $helper->getImageUrl($item->getId())?>"> </a> <?php endif; ?> </div> <div style="float: left; margin-left: 10px;"> <?php echo $item->getPreview(); ?> <p><a href="<?php echo $articleViewUrl; ?>?id=<?php echo $item->getId(); ?>" title="<?php echo $item->getHeader(); ?>">Read More</a></p> </div> <div style="clear: both"></div> </div> <?php endforeach; ?>
Создаем шаблон для страницы статьи
Создаем файл:
design/frontend/default/default/template/my_articles/view.phtml
Добавляем код:
<?php $helper = Mage::helper('myarticles'); ?> <h1><?php echo $item->getTitle(); ?></h1> <div style="float: left; width: 150px; margin-right: 10px;"> <?php if (is_file($helper->getImagePath($item->getId()))): ?> <img alt="<?php echo $item->getHeader(); ?>" style="width: 150px; height: 150px; " src="<?php echo $helper->getImageUrl($item->getId())?>"> <?php endif; ?> </div> <div class="content" style="float: left;"><?php echo $item->getContent(); ?></div> <div style="clear: both"></div>
Готово.
Комментарии
Комментарии отсутствуют, Вы можете быть первым