Получить дополнительное поле топика в Text.class

Здравствуйте. У меня такая задачка. В Text.class идет обработка текста топика по определенным правилам. Мне нужно к некоторым тегам добавить данные, которые хранятся в топике в поле topic_extra. Как их можно получить?

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

avatar
Неужели никто не знает? :( Я три дня бьюсь. А там, думаю, одну строчку надо написать (типа обращения к классу топика).
avatar
Приведите пример. Не совсем понятно, какие данные нужно добавить. Вам скорее нужно не в классе добавлять, а в файле jevix настраивать обработку
avatar
У топика есть поле в базе с названием topic_extra. Там я храню картинку-превьюшку и ссылку. Вот мне надо эту ссылку достать и прописать ее ко всем картинкам в топике. Как прописать я знаю, проблема только в получении ссылки. Как ее достать? Класс Text.class подключается до jevix, так что, думаю, можно это сделать.
avatar
Это наверно для второй версии. Есть несколько вариантов решения.
Получается картинки перед загрузкой обрабатываеются в файле image.class.php модуля image метод public function BuildHTML там при загрузке картинки загрузчиком вставляется тег с изображением в текстовое поле вида <img src=""… можно попробовать сделать шаблон, когда тут будет на этапе загрузки добавляться нужная ссылка, посмотреть как сделано добавление атрибута alt. Вот это результат работы загрузчика

Еще вариант, получать саму ссылку (можно в скрытом виде), как доп поле и добавлять атрибутом через яваскрипт внутрь img
avatar
Если делать по первому варианту или другому с предварительным добавлением ссылок в тетекстовом поле редактора, то полюбому нужно вносить в jevix настройки и добавлять дополнительные разрешенные атрибуты ссылки в img.
avatar
Нужно именно через джевикс делать. То есть в тексте картинки должны выглядеть как обычно, без ссылки. А при сохранении и выводе чтобы картинки становились ссылками. Может как-то можно в Text.class обратиться к классу Topic и вытащить оттуда данные?
avatar
Класс Text.class подключается до jevix, так что, думаю, можно это сделать.

Пардон, не Text.class, а класс топика, конечно же.
avatar
Еще раз уточню. Произвольную ссылку у меня добавлять к картинке получается. Я в текстовом классе пишу

$this->oJevix->cfgSetTagCallbackFull('img', array($this, 'imgRedirect'));

И сам метод:

$alt = isset($array['alt'])? ' alt="'. $array['alt'] .'"': '';
$title = isset($array['title'])? ' title="'. $array['title'] .'"': '';
$img = '<img src="'. $array['src'] .'" '. $alt. $title .' />';
$href = 'ВОТ ТУТ НУЖНО ПОЛУЧИТЬ ССЫЛКУ';
$target = ' target="_blank"';

return '<a '.$rel.'href="' .$href. '"'.$target.'>'.$img.'';

Все работает, добавляет. Но мне нужна ссылка, которая разная для каждой статьи.
avatar
Получилось добавить ссылку?
avatar
Увы, нет :(
avatar
а дополнительное поле добавил к форме топика?
avatar
Конечно. Туда данные пишутся, когда я сохраняю топик. Проблема в их получении при обработке текста через джевикс (класс Text.Class). Если вы мне подскажете, как внутри него получить доступ к полю external топика, я буду просто на седьмом небе и очень благодарен :)
avatar
В джевиксе нужно добавить разрешенные атрибуты для ссылок. Получается возможно джевикс вырезает все лишнее. Вот сюда нужно добавить название атрибута
avatar
Да не вырезает он ничего. Он просто видит только текст статьи. А поля он не видит, оно ему не надо. Вот мне надо получить поля. Точнее одно поле. Но, другие, думаю, можно было бы получить по аналогии — поле тегов, поле юзера итд. Они все в одной таблице хранятся, но доступен только текст.
avatar
А ты это поле с ссылкой в базу записываешь?
avatar
Даааа ))) Все есть. Надо только извлечь.
avatar
Перефразирую задание, чтобы таких вопросов не было. Как получить список тегов для статьи при обработке статьи через джевикс? По аналогии я сделаю и для ссылки )))
avatar
Просто я хотел узнать, потому что не обязательно в базе создавать поле под ссылку, а потом еще в классе топика и джевиксе мудрить. Можно проще, на кнопку отправки повесить js обработчик, и внутрь textarea тега img вставлять ссылку из поля, потом атрибут название ссылки добавить в джевкс, скрин, который я кидал выше и все. Может минут 15-20 и займет это все, без лишнего вмешательства в движек
avatar
Попробуйте посмотреть как реализовано в плагине autoalt (там добавляются alt-ы к изображениям) и сделать по аналогии
avatar
Спасибо. Посмотрел. Это не совсем то, что мне нужно. Данный плагин пересохраняет текст. То есть при редактировании топика в нем будут появляться ссылки и выглядит это страшно :). А я хотел бы, чтобы это делалось «на лету» с помощью джевикса.
avatar
В 2.0 парсинг текста топика идет через метод модуля Topic, метод выглядит так:
/**
     * Парсинг текста с учетом конкретного топика
     *
     * @param string $sText
     * @param ModuleTopic_EntityTopic $oTopic
     *
     * @return string
     */
    public function Parser($sText, $oTopic)
    {
        $this->Text_AddParams(array('oTopic' => $oTopic));
        $sResult = $this->Text_Parser($sText);
        $this->Text_RemoveParams(array('oTopic'));
        return $sResult;
    }

Как раз для того, чтобы в коллбэке обработки можно было получить параметр oTopic и соответственно все данные конкретного топика.
  • ort
  • +1
avatar
У меня первая версия Livestreet. Там как-то можно? А то вторую ставить не вариант, слишком много менял в коде.
avatar
Я так понимаю, что задача вставлять картинку, при клике на которую открывается ссылка из topic_extra?
Если так попробуйте поковырять этот плагин
avatar
Спасибо, гляну. но, судя по описанию, там нет того, что мне нужно (вытащить данные из поля экстра).
avatar
… Вроде можно вытащить данные из topic_extra: getExtraValue
Вот пример «вытаскивания» в плагине mainpreview: 1 -> 2 -> 3
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.