Новости от админа на главной странице
Всех с прошедшим праздником и с наступающим. Давным давно реализовал для своего сайта плагин (очень простой) выводящий стену админа на главную страницу в виде ленты новостей, а сегодня ко мне обратились с просьбой поделиться наработкой. Ну что же пожалуйста. Хотя нет, немного пожадничаю, плагин не дам, а вот как его быстро собрать самому расскажу, благо время на это есть.
Первое
Создаем основу плагина:
В каталоге «plugins» необходимо создать структуру каталогов, похужую на картинку выше. Здесь все очевидно: файл класса блока «BlockNews.class.php» будет формировать необходимые данные для вывода шаблона. Хук будет добавлять блок для вывода, а шаблон – содержать оформление блока.
Перейдем теперь к содержанию:
Второе
Содержание файлов:
1. plugin.xml. Здесь все как и в других плагинах.
2. PluginNews.class.php. Две строчки кода. Я не реализую ни какие методы плагина — они не нужны.
3. BlockNews.class.php. Основная задача, реализованная здесь — получение массива последних записей со стены пользователя с идентификатором 1. Если админ у Вас имеет друго ид, его необходимо явно указать здесь.
4. HookNews.class.php. Хук, добавляющий блок новостей в общий массив выводимых блоков.
5. block.News.tpl. Шаблон блока новостей. Здесь доступна переменная $aWall, установленная в классе блока.
Вот и все! Осталось лишь его раскрасить с помощью CSS и готово. Как это выглядит можно посмотреть у меня на главной странице справа в блоке «Наши новости».
Еще раз с праздником!
Первое
Создаем основу плагина:
В каталоге «plugins» необходимо создать структуру каталогов, похужую на картинку выше. Здесь все очевидно: файл класса блока «BlockNews.class.php» будет формировать необходимые данные для вывода шаблона. Хук будет добавлять блок для вывода, а шаблон – содержать оформление блока.
Перейдем теперь к содержанию:
Второе
Содержание файлов:
1. plugin.xml. Здесь все как и в других плагинах.
<?xml version="1.0" encoding="UTF-8"?>
<plugin>
<name>
<lang name="default">News</lang>
<lang name="russian">Новости</lang>
</name>
<author>
<lang name="default">andreyv</lang>
</author>
<homepage>http://gladcode.ru</homepage>
<version>1.0.0</version>
<requires>
<livestreet>1.x</livestreet>
<plugins>
</plugins>
</requires>
<description>
<lang name="default">News from admin</lang>
<lang name="russian">Новости от админа</lang>
</description>
</plugin>
2. PluginNews.class.php. Две строчки кода. Я не реализую ни какие методы плагина — они не нужны.
<?php
if (!class_exists('Plugin')) die('You are bad hacker, try again, baby!');
class PluginNews extends Plugin { }
3. BlockNews.class.php. Основная задача, реализованная здесь — получение массива последних записей со стены пользователя с идентификатором 1. Если админ у Вас имеет друго ид, его необходимо явно указать здесь.
<?php
class PluginNews_BlockNews extends Block {
public function Exec() {
/** Получаем записи стены */
$aWall = $this->Wall_GetWall(
// Так будет выводиться вся стена
//array('wall_user_id' => 1, 'pid' => null),
// А так, только записи админа ('user_id' => 1)
array('wall_user_id' => 1, 'pid' => null, 'user_id' => 1),
array('id' => 'desc'),
1, // Ид. пользователя со стены которого получаем записи
5); // 5-количество получаемых и выводимых записей
$this->Viewer_Assign('aWall', $aWall['collection']);
}
}
4. HookNews.class.php. Хук, добавляющий блок новостей в общий массив выводимых блоков.
<?php
class PluginNews_HookNews extends Hook {
public function RegisterHook() {
if ((Router::GetAction() == "index") || (Router::GetAction() == "topic") || (Router::GetAction() == "blogs")) {
$this->Viewer_AddBlocks('right', array(
array(
'block' => 'News',
'params' => array('plugin' => 'news'),
'priority' => 100,
)
));
}
}
}
5. block.News.tpl. Шаблон блока новостей. Здесь доступна переменная $aWall, установленная в классе блока.
<section class="block block-type-tags">
<header class="block-header">
<h3>Наши новости</h3>
</header>
{foreach from=$aWall item=oWall}
<div id="wall-item-{$oWall->getId()}">
<div class="comment">
<time datetime="{date_format date=$oWall->getDateAdd() format='c'}" class="comment-date">
{date_format date=$oWall->getDateAdd() hours_back="12" minutes_back="60" now="60" day="day H:i" format="j F Y, H:i"}
</time>
<div class="comment-content text" style="width: 100%; margin-left: 10px;">
{$oWall->getText()}
</div>
</div>
</div>
{/foreach}
</section>
Вот и все! Осталось лишь его раскрасить с помощью CSS и готово. Как это выглядит можно посмотреть у меня на главной странице справа в блоке «Наши новости».
Еще раз с праздником!
26 комментариев
лучше вынести в конфиг
Конфликт с админкой? Или другое?
И еще хотелось бы подробностей про раскраску — где, чего и как :)
Побольше бы таких топиков!
А установить фон для последних новостей?
Для блока добавьте уникальный класс, например news-block. Затем можно обращаться к частям блока новостей, например к первой по списку новости:
Здесь указан селектор для элемента класса .comment, находящемся во втором диве с идентификатором, начинающимся с wall-item- в блоке новостей.
Может скинет кто плагин у кого работает?
github.com/andrey-v/livestreet_plugin_news
Если поставить к этому плагину плагин стена, то получится новости и стена вместе. Как сделать из этого плагина самостоятельные новости?
1. Зарегистрировать хук шаблона, куда Вы хотите вывести список со стены, в классе HookNews, например «template_content_begin» — хук на начало контента.
2. Реализовать метод, который будет получать данные стены, как-то так:
3. Создать шаблон admin_wall_list.tpl для вывода списка также как и для блока.