Автоматический выбор блога для нового топика

Когда пользователь жмет кнопку Написать, то в выборе блога автоматически ему предлагается Персональный блог. А как было бы здорово, если бы автоматически выбирался именно тот самый блог в котором была нажата кнопка Написать.

Давайте сделаем ее! Тем более это очень просто.

Итак, для этого нам нужно передать ID блога через ссылку. Исправляем путь в кнопке Написать на следующий:

{$DIR_WEB_ROOT}/topic/add/{$oBlog->getId()}


Далее открываем файл ActionTopic.class.php и там добавляем всего две строки:

/**
* Получаем номер текущего блога
*/
$sBlogId=$this->GetParam(0);

// ... А ниже

$this->Viewer_Assign('sBlogId',$sBlogId);


И осталось немного изменить шаблон, чтобы текущий блог уже был выделен. Открываем ActionTopic/add.tpl и там добавляем проверку:

<select name="blog_id" id="blog_id" onChange="ajaxBlogInfo(this.value);">
	<option value="0">{$aLang.topic_create_blog_personal}</option>
	{foreach from=$aBlogsOwner item=oBlog}
		<option value="{$oBlog->getId()}" {if $sBlogId==$oBlog->getId()}selected{/if}>{$oBlog->getTitle()}</option>
	{/foreach}
	{foreach from=$aBlogsUser item=oBlogUser}
		<option value="{$oBlogUser->getBlogId()}" {if $sBlogId==$oBlogUser->getBlogId()}selected{/if}>{$oBlogUser->getBlogTitle()}</option>
	{/foreach}
</select>


PS: Ваши шаблоны могут отличаться от моих и если вы что-то не поняли, то обращайтесь за консультацией к Lora_GT ;-)
PPS: За рекламу она не платила :-)

25 комментариев

avatar
Большое спасибо!
avatar
Здорово, как раз то что мне надо, а что будет если пользователь не подключен к блогу? Было бы очень хорошо если он жмет Написать в блоге — у него хватает кармы на присоединение — он автоматичеки присоединяется и пишет туда.
Как вы на это смотрите?
Можно посмотреть пример?
avatar
Можно маленький вопрос — в каком файле исправить ссылку НАПИСАТЬ?
{$DIR_WEB_ROOT}/topic/add/{$oBlog->getId()}

это в каком файле меняется? Или в нескольких?
avatar
На главной странице вылетает ошибка:
Fatal error: Call to a member function getId() on a non-object in
Как пофиксить? Спасибо…
avatar
Та же фигня. Не работает. Похоже, на LS становится правилом публиковать интересные, но неработающие решения с перспективой на реализацию за деньги. Или я не прав?
avatar
Я бы сказал, что скорее надо смотреть на дату сначала ;-)

Это интересное решение банально устарело немного для текущей версии.
avatar
Упс. Каюсь. Может быть указать в топике, что для ранней версии? Не думаю, что все на дату смотрят.
avatar
Вы не правы :) Решения публикуются рабочими на актуальной на тот момент версии ЛС. Другое дело, что не все разработчики поддерживают совместимость с новыми версиями движка…
avatar
В этом то и беда. Было бы хорошо, если бы крупно указывалась версия LS.
avatar
Ну так с тех пор появился как раз раздел «Модули» и там есть версия. Ну а тут вроде как остались разные заметки из прошлого :-)
avatar
неправ))
avatar
тАК никто не пробовал реализовать данную фичу на 0.3.1???
avatar
все отлично работает на 0.3.1
avatar
В связи с тем что заработало — вопрос! Вот захожу я в нужный блог, нажимаю «добавить топик» и открывается страница с добавлением топика. Внимание, вопрос! Как убрать выбор блогов и оставить только название того, которого я выбрал для добавления топика!
avatar
решил проблему данного хака. Дело в том что у администраторов все работает, а у пользователей во всех случаях выходит «Персональный блог»

Проблема была решена так, место предложенного в данной теме кода
<select name="blog_id" id="blog_id" onChange="ajaxBlogInfo(this.value);">
        <option value="0">{$aLang.topic_create_blog_personal}</option>
        {foreach from=$aBlogsOwner item=oBlog}
                <option value="{$oBlog->getId()}" {if $sBlogId==$oBlog->getId()}selected{/if}>{$oBlog->getTitle()}</option>
        {/foreach}
        {foreach from=$aBlogsUser item=oBlogUser}
                <option value="{$oBlogUser->getBlogId()}" {if $sBlogId==$oBlogUser->getBlogId()}selected{/if}>{$oBlogUser->getBlogTitle()}</option>
        {/foreach}
</select>


Поставить этот код:
<select name="blog_id" id="blog_id" onChange="ajaxBlogInfo(this.value);">
     					<option value="0">{$aLang.topic_create_blog_personal}</option>
     					{foreach from=$aBlogsOwner item=oBlog}
     						<option value="{$oBlog->getId()}" {if $sBlogId==$oBlog->getId()}selected{/if}>{$oBlog->getTitle()}</option>
     					{/foreach}
     					{foreach from=$aBlogsUserCanWrite item=oBlogUser}
     						<option value="{$oBlogUser->getBlogId()}" {if $sBlogId==$oBlogUser->getBlogId()}selected{/if}>{$oBlogUser->getBlogTitle()}</option>
     					{/foreach}
     				</select>
avatar
хак для 031

файл
/templates/skin/new/header_nav.tpl

находим
<a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_TOPIC}/add/


заменяем на
<a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_TOPIC}/add/{if $oBlog}{$oBlog->getId()}{/if}


файл ActionTopic.class.php

находим
/**
	 * Инициализация
	 *
	 * @return unknown
	 */
	public function Init() {


добавляем после него

/** 
	* Получаем номер текущего блога
	*/
	$sBlogId=$this->GetParam(0);
	
	$this->Viewer_Assign('sBlogId',$sBlogId);


файл
avatar
хак для 031

файл
/templates/skin/new/header_nav.tpl

находим
<a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_TOPIC}/add/


заменяем на
<a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_TOPIC}/add/{if $oBlog}{$oBlog->getId()}{/if}


файл ActionTopic.class.php

находим
/**
	 * Инициализация
	 *
	 * @return unknown
	 */
	public function Init() {


добавляем после него

/** 
	* Получаем номер текущего блога
	*/
	$sBlogId=$this->GetParam(0);
	
	$this->Viewer_Assign('sBlogId',$sBlogId);


файл
/templates/skin/new/actions/ActionTopic/add.tpl

находим
<select name="blog_id" id="blog_id" onChange="ajaxBlogInfo(this.value);">
     					<option value="0">{$aLang.topic_create_blog_personal}</option>
     					{foreach from=$aBlogsOwner item=oBlog}
     						<option value="{$oBlog->getId()}" {if $_aRequest.blog_id==$oBlog->getId()}selected{/if}>{$oBlog->getTitle()}</option>
     					{/foreach}
     					{foreach from=$aBlogsUserCanWrite item=oBlogUser}
     						<option value="{$oBlogUser->getBlogId()}" {if $_aRequest.blog_id==$oBlogUser->getBlogId()}selected{/if}>{$oBlogUser->getBlogTitle()}</option>
     					{/foreach}
     				</select>


заменяем на

<select name="blog_id" id="blog_id" onChange="ajaxBlogInfo(this.value);">
                                        <option value="0">{$aLang.topic_create_blog_personal}</option>
                                        {foreach from=$aBlogsOwner item=oBlog}
                                                <option value="{$oBlog->getId()}" {if $sBlogId==$oBlog->getId()}selected{/if}>{$oBlog->getTitle()}</option>
                                        {/foreach}
                                        {foreach from=$aBlogsUserCanWrite item=oBlogUser}
                                                <option value="{$oBlogUser->getBlogId()}" {if $sBlogId==$oBlogUser->getBlogId()}selected{/if}>{$oBlogUser->getBlogTitle()}</option>
                                        {/foreach}
                                </select>
avatar
на всякий случай для любителей портировать под 0.4:

в шаблоне /templates/skin/ВАШ_СКИН/actions/ActionTopic/add.tpl сроку


<option value="{$oBlog->getId()}" {if $_aRequest.blog_id==$oBlog->getId()}selected{/if}>{$oBlog->getTitle()}</option>


нужно заменить на


<option value="{$oBlog->getId()}" {if $_aRequest.blog_id==$oBlog->getId() or $sBlogId==$oBlog->getId()}selected{/if}>{$oBlog->getTitle()}</option>


спрашивали, то публикую
avatar
Спасиб за код. Но мне помогло вот что:

<select name="blog_id" id="blog_id" onChange="ajaxBlogInfo(this.value);">
     					<option value="0">{$aLang.topic_create_blog_personal}</option>
     					<strong>{foreach from=$aBlogsAllow item=oBlog}
     						<option value="{$oBlog->getId()}" {if $sBlogId==$oBlog->getId()}selected{/if}>{$oBlog->getTitle()}</option>
     					{/foreach}</strong>
     				</select></p>
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.