Список статей и страница статьи
Для вывода данных 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>
Готово.
devreadwrite.com



Подборка адаптивных шаблонов для вашей CMS
Статьи по
Как получить и установить HTTPS сертификат на сайта

Комментарии
Комментарии отсутствуют, Вы можете быть первым