+0.21
Рейтинг
1.25
Сила

Vlad

Выносим обработку евентов в отдельный файл

В транковой версии на github.com появилась возможность выносить объемную обработку евентов из экшена в отдельные файлы.

Эти файлы размещаются в каталоге /classes/actions/[action]/Event[Name].class.php, где [action] — это название экшена, которому принадлежит евент, [Name] — название внешнего обработчика евента.

Рассмотрим более подробно.
Пусть у нас будет экшен ActionBlog.class.php:
<?php

class ActionBlog extends Action {

	public $oUserCurrent=null;

	public function Init() {
		$this->oUserCurrent=$this->User_GetUserCurrent();

		$this->SetDefaultEvent('index');
	}

	/**
	 * Регистрируем евенты
	 *
	 */
	protected function RegisterEvent() {
		/**
		 * Регистрируем внешние обработчики евентов
		 */
		$this->RegisterEventExternal('Topic','ActionBlog_EventTopic');

		$this->AddEvent('index','EventIndex');
		$this->AddEventPreg('/^topic$/i','/^(\d+)\.html$/i','/^$/i','Topic::EventShowTopic');
		$this->AddEventPreg('/^topic$/i','/^list$/i','/^$/i','Topic::EventList');
	}


	protected function EventIndex() {
		/**
		 * Устанавливаем шаблон для вывода
		 */
		$this->SetTemplateAction('index');
	}
}
?>

Читать дальше →

Поделитесь секретом - редактор на стене

Добрый день, друзья! Есть ли среди Вас такие умельцы, у которых бы вышло прикрутить редактор на стену? Поиск по сайту ничего не дал. Если все-таки найдется такой человек — было бы просто здорово услышать его мнение по этому поводу и получить годное решение данного вопроса.

UPD #1 НЕ ПОЛУЧИЛОСЬ ((( не реагирует кнопка Отправить при ответе на запись размещенную на стене. Просто на стену пишет без проблем.

вот коды моих файлов
wall.tpl
{assign var="oSession" value=$oUserProfile->getSession()}
{assign var="oVote" value=$oUserProfile->getVote()}

<script type="text/javascript">
	ls.wall.init({
		login:'{$oUserProfile->getLogin()}'
	});
	
	jQuery(document).ready(function($){
		$("textarea").charCount({
			allowed: 250,		
			warning: 0
		});
	});
</script>
<h2 class="header-table">Стена <span class="fl-r">({$iCountWallUser})</span></h2>
{if $oUserCurrent}
	<form class="wall-submit">
		<textarea rows="1" id="wall-text" style="height: 100px;" class="input-text mce-editor markitup-editor input-width-full js-wall-reply-parent-text"></textarea>

		<button type="button" onclick="ls.wall.add(jQuery('#wall-text').val(),0);" class="button button-primary js-button-wall-submit">{$aLang.wall_add_submit}</button>
	</form>
{else}
	<div class="wall-note">
		<h3>{$aLang.wall_add_quest}</h3>
	</div>
{/if}

{if !count($aWall)}
	<div class="wall-note" id="wall-note-list-empty">
		<h3>{$aLang.wall_list_empty}</h3>
	</div>
{/if}

<div id="wall-container" class="wall">
	{include file='actions/ActionProfile/wall_items.tpl'}
</div>


{if $iCountWall-count($aWall)}
	<a href="#" onclick="return ls.wall.loadNext();" id="wall-button-next" class="stream-get-more"><span class="wall-more-inner">{$aLang.wall_load_more} (<span id="wall-count-next">{$iCountWall-count($aWall)}</span>)</span></a>
{/if}
{include file='editor.tpl' sImgToLoad='wall_text' sSettingsTinymce='ls.settings.getTinymceComment()' sSettingsMarkitup='ls.settings.getMarkitupComment()'}


wall_item.tpl
{foreach from=$aWall item=oWall}
	{assign var="oWallUser" value=$oWall->getUser()}
	{assign var="aReplyWall" value=$oWall->getLastReplyWall()}

	<div id="wall-item-{$oWall->getId()}" class="js-wall-item wall-item-wrapper">
		<div class="wall-item">
			<a href="{$oWallUser->getUserWebPath()}"><img src="{$oWallUser->getProfileAvatarPath(48)}" alt="avatar" class="avatar" /></a>
			
			<p class="info">
				<a href="{$oWallUser->getUserWebPath()}">{$oWallUser->getProfileName()}</a> ·
				<time class="date" datetime="{date_format date=$oWall->getDateAdd() format='c'}">{date_format date=$oWall->getDateAdd() hours_back="12" minutes_back="60" now="60" day="day H:i" format="j F Y, H:i"}</time>
			</p>

			<div class="wall-item-content text">
				{$oWall->getText()}
			</div>
			
			{if $oUserCurrent}
				<ul class="actions wall-item-actions">
					{if $oUserCurrent and !$aReplyWall}
						<li><a href="#" class="link-dotted" onclick="return ls.wall.toggleReply({$oWall->getId()});">{$aLang.wall_action_reply}</a></li>
					{/if}
					{if $oWall->isAllowDelete()}
						<li><a href="#" onclick="return ls.wall.remove({$oWall->getId()});" class="link-dotted">{$aLang.wall_action_delete}</a></li>
					{/if}
				</ul>
			{/if}
		</div>
		
		{if $aReplyWall}
			<div class="wall-item-replies" id="wall-item-replies-{$oWall->getId()}">
				{if count($aReplyWall) < $oWall->getCountReply()}
					<a href="#" onclick="return ls.wall.loadReplyNext({$oWall->getId()});" id="wall-reply-button-next-{$oWall->getId()}" class="wall-more-reply">
						<span class="wall-more-inner">{$aLang.wall_load_reply_more} <span id="wall-reply-count-next-{$oWall->getId()}">{$oWall->getCountReply()}</span> {$oWall->getCountReply()|declension:$aLang.comment_declension:'russian'}</span>
					</a>
				{/if}
			
				{if $aReplyWall}
					<div class="wall-item-container" id="wall-reply-container-{$oWall->getId()}">
						{include file='actions/ActionProfile/wall_items_reply.tpl'}
					</div>
				{/if}
			</div>
		{/if}
		
		{if $oUserCurrent}
			<form class="wall-submit wall-submit-reply" {if !$aReplyWall}style="display: none"{/if}>
                               <textarea rows="4" 
				         id="wall-text" 
				         class="input-text mce-editor markitup-editor input-width-full js-wall-reply-parent-text" 
				         placeholder="{$aLang.wall_add_title}"
				         onclick="return ls.wall.expandReply(0);"></textarea>

				<button type="button" onclick="ls.wall.addReply('#wall-reply-text-{$oWall->getId()}'.val(), {$oWall->getId()});" class="button button-primary js-button-wall-submit">{$aLang.wall_reply_submit}</button>
			</form>
		{/if}
	</div>
{/foreach}

Разные шаблоны новотей для полной и краткой новости

Я думаю многие задавались и не знали как просто и эффективно задать разные шаблоны для полной и краткой новостей, к сожалению в стандартных шаблонах Лайвстрита — такая функция не предусмотрена.



Итак обмозговав и протестировав, выкладываю Вам свой мануал, решение данной проблемы вывода новостей.

Читать дальше →

Ajax-вызов для обновления блока, который генерирует плагин

Доброго дня!
Возникла следущая проблема.
Есть плагин, который, помимо всего прочего, показывает блок в сайдбаре. По определенным событиям этот блок надо было бы обновлять. И тут я застрял. Не понимаю, как сделать соответствующий вызов используя ajax (ls.ajax). Если обращаюсь исходя из логики (по роутеру), получаю 404.
Например пробовал регистрировать event так: $this->AddEventPreg('/^ajax$/i', '/^reload-box$/i', 'ReGenerateBox'); и обращаться примерно к /my+plugin/ajax/reload-box/. в ответ хотел получить просто html, так же как при генерации блока на загрузке.
Не вышло.
Очень прошу натолкнуть на полезные мысли или просто подсказать решение. Заранее спасибо!

Как поставить текущую страницу в условие?

Здравствуйте!

Суть проблемы вот в чем: есть файл menu.blog.tpl, в котором есть такие строки:
<li {if $sMenuItemSelect=='blog'}class="active"{/if}>
		<a href="{router page='blog'}">{$aLang.blog_menu_collective}</a>
	</li>

Подскажите, пожалуйста, как воткнуть в это условие проверку на нахождение на определенной странице, т.е., если меню=Блог И текущая страница != blog/test, то .....

я пытался поставить так:
<li {if $sMenuItemSelect=='blog' && router page!='blog/test'}class="active"{/if}>
		<a href="{router page='blog'}">{$aLang.blog_menu_collective}</a>
	</li>

но соответственно получаю синтаксическую ошибку, т.к. router page здесь явно не подходит.

Прошу помочь дельным советом.

Вывод списка последних топиков в блок

Всем привет. Есть ли простой способ (не заморачиваясь с классами и тп) вывести в блок список 5 последних топиков? Пустой блок, скажем, создал.
… и вконец запутался со smarty.

Ответ:

{assign var="aTopics" value=$LS->Topic_GetTopicsByBlogId(__BLOG_ID__, 1, 10, array ('blog'), false)}
{assign var="aTopics" value=$aTopics.collection}
{foreach from=$aTopics item=oTopic}
    <a href="{$oTopic->getUrl()}">{$oTopic->getTitle()|escape:'html'}</a>
{/foreach}

Двойной watermark при использовании "main preview"

Доброго времени суток. При использовании плагина main preview, включение в конфиге водяных знаков приводит к их дублирующему наложению.

Есть ли способ убрать watermark на превьюшках?

Заранее спасибо за ответ.


Под катом скрин проблемы:

Похожие записи на основе плагинов Main preview и similar topic

Чтоб не ходить далеко да около сразу покажу конечный результат, а кому понравится — добро пожаловать под кат…

похожие записи

Посмотреть в живую можно здесь деньд.рф/blog/news/468.html

Все это сделано на основе двух плагинов:

«Main Preview»

«Похожие записи в попап окне (Similar topics in popup)»


Читать дальше →

Мануал как добавить google карты к топику

Многии задаются вопросом как добавить google карту к топику чтобы можно было отмечать точки.
Такой вопрос встал и у меня после неудачного серфинга понял что прийдётся под свои нужды писать самому.

Я думаю многим будет интересно как я это сделал поэтому представляю список всех изменений что я вносил в код.

Оговорюсь сразу делал не через плагины а правил коды. Просто времени на изучение плагинов небыло.

И так приступим

1. В \classes\actions\ActionTopic.class.php после:
$_REQUEST['topic_title']=$oTopic->getTitle();


добавил:
$_REQUEST['coodrinati']=$oTopic->getCoodrinati();



Читать дальше →