Дополнительное поле при создании топика

Здравствуйте, довольно актуальная тема на 0.5.x

Дополнительное поле при создание топика

Сразу хочу сказать спасибо:
bas eXtravert bamboo

Источники: HOWTO: Дополнительные поля при создании топика — подправил адреса к файлам + добавил русского языка

Цель:
  • Часть I создание дополнительного поля в шаблоне new под 0.5.1
  • Часть II опубликованное дополнительное поле видно только администраторам


Часть I


В файле: templates/skin/new/actions/ActionTopic/add.tpl
после:
<p><label for="topic_tags">{$aLang.topic_create_tags}:</label><br />
                                        <input type="text" id="topic_tags" name="topic_tags" value="{$_aRequest.topic_tags}" class="w100p" /><br />
                                <span class="form_note">{$aLang.topic_create_tags_notice}</span></p>


вставить:
<p><label for="topic_somecontent">{$aLang.topic_create_file_url}:</label><br />
                                        <input type="text" id="topic_somecontent" name="topic_somecontent" value="{$_aRequest.topic_somecontent}" class="w100p" /></span></p>


В файле: classes/modules/topic/entity/Topic.entity.class.php
в любое понравившееся (в пределах класса) место вставляем:

public function getSomeContent() {
        $this->extractExtra();
        if (isset($this->aExtra['some_content'])) {                                  
                $somecontent=$this->aExtra['some_content'];
                                return $somecontent;
        }
        return null;
    }
        public function setSomeContent($data) {
        $this->extractExtra();
        $this->aExtra['some_content']=$data;
                $this->setExtra($this->aExtra);
    }

пример:
начиная с 134 : 413

В файле: classes/actions/ActionTopic.class.php
после строчки (ориентировочно 166 строка)
$_REQUEST['topic_forbid_comment']=$oTopic->getForbidComment();

вставляем строчку
$_REQUEST['topic_somecontent']=$oTopic->getSomeContent();

далее после строки (встречается два раза — примерно 384 и 537 строки)
$oTopic->$oTopic->setTextHash(md5(getRequest('topic_text')));

вставляем
$oTopic->setSomeContent(getRequest('topic_somecontent'));


В файле: templates/skin/new/topic_topic.tpl
{$oTopic->getText()}
                                </div>

вставляем
{$aLang.topic_create_file_url_echo}: <a href="{$oTopic->getSomeContent()}" target="_blank">{$oTopic->getSomeContent()}</a>


Осталось подправить файл templates/language/russian.php
в группу /**
* Создание топика
*/

добавить
'topic_create_file_url' => 'Ссылка на файл (видна только администраторам)',
'topic_create_file_url_echo' => 'Ссылка на файл',


245:976

Все. Должно работать, как часы)

Часть II

Приступаем ко второй части (опубликованное дополнительное поле видно только администраторам)

Если вы хотите, чтобы дополнительное поле было видно только администраторам:

«обогнем» в файле: templates/skin/new/topic_topic.tpl
{$aLang.topic_create_file_url_echo}: <a href="{$oTopic->getSomeContent()}" target="_blank">{$oTopic->getSomeContent()}</a>

в
{if $oUserCurrent and $oUserCurrent->isAdministrator()} 
...
{/if}

Пример:

Теперь ваше дополнительное поле видно только администраторам.
За помощь в решении спасибо: bamboo

Работа дополнительного поля
при создании и редактировании топика:


как видит дополнительное поле Администратор:


как видит дополнительное поле пользователь ;)


Таким образом, используя информацию в данном топике — можно очень быстро добавить на LS дополнительное поле. При желании скрыть его от общего обозрения.
Спасибо за внимание.

21 комментарий

avatar
В планах написать HOWTO по дополнительным полям к фотосет'у
avatar
Отлично, спасибо!) Только вот надо сделать ссылкой только урл, а сейчас ссылка выглядит так: ссылка на файл: урл.
avatar
Исправил.
templates/skin/new/topic_topic.tpl
{$aLang.topic_create_file_url_echo}: <a href="{$oTopic->getSomeContent()}" target="_blank">{$oTopic->getSomeContent()}</a>
Будет выглядеть:

Вечный двигатель: http://livestreet.ru
avatar
Вопрос создания произвольных полей(топика) для меня сейчас актуален.
Я задавал вот такой вопрос на хабре
Никто там не ответил.
Почему вы храните доп. поле в extra?
Я думаю, что лучше добавить отдельную таблицу(что-то вроде topic_optional) и в ней уже хранить произвольные поля.
Сейчас пробую реализовать.
Потом, может быть выкачу плагин.
avatar
идея была в быстроте запроса на получение списка топиков, extra подходит только для полей по которым не требуется производить поиск и выборку
avatar
Спасибо за ответ. А как тогда хранить произвольное поле, которое хранит не одно значения, а несколько?
avatar
Где вообще можно почитать подробно про интерфейс взаимодействия с extra?
avatar
А как тогда хранить произвольное поле, которое хранит не одно значения, а несколько?
не понял
в extra можно хранить данные в виде массива
пример:
public function getMyData() {
     return $this->getExtraValue('my_data');
    }
    public function setMyData($data) {
     $this->setExtraValue('my_data',$data);
    }
avatar
Сейчас пробую EAV реализацию дополнительных полей к топику. О результатах позже создам пост.
avatar
Тоже прихожу к этой модели. Topic, key, value
avatar
помогите плииз сделать доп поле по умолчанию таким-то если оно не заполнено…

ксли поле заполнено, то показывать источник: что написали, а если нет, то ваш сайт. хелп!
avatar
{if $oTopic->getSomeContent()}
   {$aLang.topic_create_file_url_echo}: <a href="{$oTopic->getSomeContent()}" target="_blank">{$oTopic->getSomeContent()}</a>
{else}
   <a href="{cfg name='path.root.web'}" target="_blank">{cfg name='path.root.web'}</a>
{/if}
Как-то так, на работоспособность не проверял.

Ищу заказы на верстку 0.5.1 шаблонов.
avatar
а каким образом реализовать возможность дополнительного поля только для определенного блога?
avatar
Спасибо автору, все получилось, добавил два поля.
Но, остался момент если нажать РЕДАКТИРОВАТЬ, то придется вставлять данные поля по новой или они будут просто пустые. Помогите решить проблему с редактированием топиков.
avatar
Тоже самое заметил, кто-нибудь нашёл как исправить? Ввожу в поле данные, нажимаю на «опубликовать» в поле нет записи, далее нажимаю на редактировать топик, вставляю ещё раз и только тогда данные появляются.
avatar
пробовал на LS1, не работает

есть мануал не для 0.5?
avatar
Напишу на этой неделе.
avatar
Супер!
avatar
Прошло пару месяцев, так ничего и не произошло((
avatar
у тебя получилось?
avatar
подскажи плиз, что необходимо поменять для LS1?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.