Изображение под заголовком

К 9 мая хочу реализовать такую задумку — если пост о войне, то пользователь ставит галку «Пост о войне» и под заголовком в топике отображается георгиевская ленточка. У меня LiveStreet 0.3.1. Попытался все это дело осилить сам, но до конца довести никак не получается, нужна ваша помощь.

Значит сделал следующее, в файле config.php добавил:
define('TOPIC_MAI',"здесь адрес изображения");


В файле ActionTopic.class.php добавил:
$_REQUEST['topic_mai']=$oTopic->getMai();


В файле Topic.entity.class.php добавил:
public function getMai() {
        return $this->_aData['topic_mai'];
    }


Но вот дальше не хватает мозгов, принципе нужен чекбокс под редактором, где расположены другие — разрешить комментарии или нет и выводить на главную или нет. Может кто подскажет, с меня изображение ленточки для этой задумки :)

24 комментария

avatar
1. нужно где-то хранить данные статуса => нужно добавить это поле в таблицу топика
2. прописать get и set в сущность топика
public function getMai() {
        return $this->_aData['topic_mai'];
    }
public function setMai($data) {
        $this->_aData['topic_mai']=$data;
    }

3. изменить функции добавления и обновления топика
4. добавить в шаблон редактирования топика нужный чекбокс
5. отредактировать екшн для сохранения и обновления топика
6. отредактировать шаблон отображения топика (списка топиков, где проверять $oTopic->getMai(); и в зависимости от это выводить картинку)
avatar
Что-то не то, выдает ошибку:
Notice: Undefined index: topic_vip in /home/domains/site.ru/public_html/classes/modules/topic/entity/Topic.entity.class.php on line 114

тоесть в строке:
return $this->_aData['topic_vip'];

в чем может быть дело?
avatar
хм… сложно сказать — а какие правки вносились?
avatar
Переименовал функцию в vip, а так все также, добавил в конфиг:
define('TOPIC_VIP',"здесь адрес изображения");

Добавил в ActionTopic.class.php:
$_REQUEST['topic_vip']=$oTopic->getVip();

И добавил в Topic.entity.class.php:
public function getVip() {
        return $this->_aData['topic_vip'];
    }
public function setVip($data) {
        $this->_aData['topic_vip']=$data;
    }

Добавил в шаблон чекбокс, но это не существенно и добавил в шаблоны топика и списка топиков:
{$oTopic->getVip()}
avatar
а откуда этот topic_vip берётся? в таблице такое поле есть?
avatar
в бд? нет, я впринципе пытался сделать по принципу hide, но с чекбоксом. Я так понимаю topic_vip нужно прописать в Topic.mapper.class.php или где?
avatar
а как вы потом собираетесь определять — есть у топика этот флаг или нет?
avatar
Да я не силен в php поэтому и обратился за помощью.
avatar
выше я расписал что нужно сделать.
посмотрете как сохраняется флаг вывода на главную и сделайте по аналогии для вашего поля.
avatar
добавил поле topic_vip в бд, теперь там где должно выводиться изображение выводится 0 и чекбокс даже при его отметке галкой при повторном редактировании остается пустым
avatar
по аналогии с принудительным выводом на главную + превьюшка для топика делайте!
avatar
livestreet.ru/blog/3311.html

здесь мы разбирали как закрепить топик на главной. по аналогии сделайте для своего случая
avatar
я уже рассматривал закрепление топика на главной, я не могу понять, как прикрутить изображение к чекбоксу
avatar
в ActionTopic.class.php в массив данных пихать дополнительную переменную, пихать ее в шаблон и в шаблоне
{if $oTopic->getVip}<img src="vip.jpg>{/if} 
avatar
Вообщем сделал следующее.
1. В ActionTopic.class.php после:
$_REQUEST['topic_forbid_comment']=$oTopic->getForbidComment();

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

2. В Topic.entity.class.php после:
public function getForbidComment() {
        return $this->_aData['topic_forbid_comment'];
    }

добавил:
public function getVip() {
        return $this->_aData['topic_vip'];
    }

и после:
public function setForbidComment($data) {
        $this->_aData['topic_forbid_comment']=$data;
    }

добавил:
public function setVip($data) {
        $this->_aData['topic_vip']=$data;
    }

3. В Topic.mapper.class.php добавил vip сюда:
public function AddTopic(TopicEntity_Topic $oTopic) {
		$sql = "INSERT INTO ".DB_TABLE_TOPIC." 
			(blog_id,
			user_id,
			topic_type,
			topic_title,			
			topic_tags,
			topic_date_add,
			topic_user_ip,
			topic_publish,
			topic_publish_draft,
			topic_publish_index,
			topic_cut_text,
			topic_forbid_comment,
			topic_vip,	
			topic_text_hash			
			)
			VALUES(?d,  ?d,	?,	?,	?,  ?, ?, ?d, ?d, ?d, ?, ?, ?d, ?)
		";			
		if ($iId=$this->oDb->query($sql,$oTopic->getBlogId(),$oTopic->getUserId(),$oTopic->getType(),$oTopic->getTitle(),
			$oTopic->getTags(),$oTopic->getDateAdd(),$oTopic->getUserIp(),$oTopic->getPublish(),$oTopic->getPublishDraft(),$oTopic->getPublishIndex(),$oTopic->getCutText(),$oTopic->getForbidComment(),$oTopic->getVip(),$oTopic->getTextHash())) 

и сюда:
public function UpdateTopic(TopicEntity_Topic $oTopic) {		
		$sql = "UPDATE ".DB_TABLE_TOPIC." 
			SET 
				blog_id= ?d,
				topic_title= ?,				
				topic_tags= ?,
				topic_date_add = ?,
				topic_date_edit = ?,
				topic_user_ip= ?,
				topic_publish= ?d ,
				topic_publish_draft= ?d ,
				topic_publish_index= ?d,
				topic_rating= ?f,
				topic_count_vote= ?d,
				topic_count_read= ?d,
				topic_count_comment= ?d, 
				topic_cut_text = ? ,
				topic_forbid_comment = ? ,
				topic_vip = ?d,
				topic_text_hash = ? 
			WHERE
				topic_id = ?d
		";			
		if ($this->oDb->query($sql,$oTopic->getBlogId(),$oTopic->getTitle(),$oTopic->getTags(),$oTopic->getDateAdd(),$oTopic->getDateEdit(),$oTopic->getUserIp(),$oTopic->getPublish(),$oTopic->getPublishDraft(),$oTopic->getPublishIndex(),$oTopic->getRating(),$oTopic->getCountVote(),$oTopic->getCountRead(),$oTopic->getCountComment(),$oTopic->getCutText(),$oTopic->getForbidComment(),$oTopic->getVip(),$oTopic->getTextHash(),$oTopic->getId())) {

4. Выполнил запрос в базу:
ALTER TABLE `prefix_topic` ADD `topic_vip` tinyint(1) default '0' AFTER `topic_forbid_comment`

5. В шаблоны topic.tpl и topic_list.tpl добавил:
{if $oTopic->getVip}<img src="vip.jpg>{/if}

6. В шаблон actions/ActionTopic/add.tpl добавил:
<p><label for=""><input type="checkbox" id="topic_vip" name="topic_vip" class="checkbox" value="1" {if $_aRequest.topic_vip==1}checked{/if}/> 
					— {$aLang.topic_vip}</label><br />
					<span class="form_note">{$aLang.topic_create_vip}</span></p>

В результате при создании/редактировании топика я ставлю галку на этот чекбокс, типа сделать топик vip, сохраняю, но изображение не появляется, при вторичном открытии для редактирования галки на чекбоксе нет. Что я не так сделал?
avatar
livestreet.ru/blog/3311.html
5 пункт раскурите… особенно ActionTopic. должно получиться
avatar
в смысле пункты а, б
avatar
Спасибо, все получилось. Добавил в ActionTopic.class.php после:
$oTopic->setForbidComment(0);
		if (getRequest('topic_forbid_comment')) {
		$oTopic->setForbidComment(1);
		}

следующее:
$oTopic->setVip(0);
		if (getRequest('topic_vip')) {
			$oTopic->setVip(1);
		}

и после:
$oTopic->setForbidComment(0);
		if (getRequest('topic_forbid_comment')) {
			$oTopic->setForbidComment(1);
		}

следующее:
$oTopic->setVip(0);
		if (getRequest('topic_vip')) {
			$oTopic->setVip(1);
		}

Кому интересно, можно посмотреть здесь, ну и кому понравилось, ленточки в png и psd форматах с описанием по установке качаем здесь. Всем спасибо за помощь!
avatar
ты прям
<img src="vip.jpg>
так картинку и добавил? Или у тебя там полный путь до нее?
avatar
полный путь конечно
avatar
5 пункт. скобки не забыли?
{if $oTopic->getVip()}<img src="полный путь до картинки" alt="" />{/if}
avatar
спасибо, но все равно не помагает
avatar
попробуйте вставить отладочные var_dump-ы.
avatar
все большое спасибо, все вышло выше в комментах отписал
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.