Перейти к содержимому


Фотография
- - - - -

Как написать свой хук

хуки

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 8

#1 Оффлайн   Alien2001

    Пользователь


  • Пользователи
  • Репутация
    -1
    • Cообщений: 31
    • Форум:Нет

Отправлено 07 Август 2012 - 12:14

Пытаюсь написать собственный хук для расширения возможностей скина.

Расширять предполагается группу skin_forum, шаблон topicPrefixWrap, который формирует префиксы "Зафиксировано" и "Опрос".

function topicPrefixWrap($text) {
$IPBHTML = "";
//--starthtml--//
$IPBHTML .= <<<EOF
<if test="prefix:|:$text">
<span class='ipsBadge ipsBadge_green'>{$text}</span>&nbsp;
</if>
EOF;
//--endhtml--//
return $IPBHTML;
}

Заходим в админку и создаем хук (в режиме разработчика):

Имя файла в директории хука - test.php
Имя класса - PollPinnedIcon
Тип файла хука - Хук для шаблона
Группа шаблонов, к которой принадлежит хук - skin_forum
Шаблон, в котором находится хук - topicPrefixWrap
Тип хука для шаблона - условие if
ID хука - не выбрано (совсем непонятно, что это, из выпадающего списка можно выбрать только prefix)
Расположение - перед началом if


Сам файл хука выглядит так:

<?php
class PollPinnedIcon
{
    public function getOutput()
    {
    }
   public function replaceOutput( $output, $key )
    {
	   $output = "бла-бла";
	  return $output;
   }
}

Не работает. Бла-бла не выводится. Наверное, я что-то не так делаю. Но что?

Спасибо
  • 0

Заработок и обучение заработку

#2 Гость_Олександр_*


  • Гости
  • Репутация
    0

Отправлено 08 Август 2012 - 01:43

Вот содержимое test.php:
class PollPinnedIcon {
	public function __construct()
	{
		$this->registry     = ipsRegistry::instance();
	}
	public function getOutput() {
		return 'бла-бла';
	}
}


#3 Оффлайн   Alien2001

    Пользователь


  • Пользователи
  • Репутация
    -1
    • Cообщений: 31
    • Форум:Нет

Отправлено 08 Август 2012 - 11:21

Спасибо огромное! Оно работает!
Буду разбираться дальше!
  • 0

#4 Оффлайн   Alien2001

    Пользователь


  • Пользователи
  • Репутация
    -1
    • Cообщений: 31
    • Форум:Нет

Отправлено 08 Август 2012 - 17:38

Еще один вопрос, теперь по Skin Overloads

Если для того же фрагмента нужно сделать свою функцию topicPrefixWrap ()

Создаю хук типа Skin Overloads

Имя класса - pinpoll

Класс расширяемый этим файлом - skin_forum

class pinpoll extends skin_forum (~id~) {
 
public function topicPrefixWrap($text) {
 
$IPBHTML = "";
//--starthtml--//
$IPBHTML .= <<<EOF
<span class='ipsBadge ipsBadge_green'>бла-бла-бла</span>&nbsp;
EOF;
//--endhtml--//
return $IPBHTML;
}
}

Я создаю этот хук. Происходит странная вещь - он перезаписывает файл хука, вставляя вместо skin_forum, group_hideForum_list, хотя эти хуки вроде как не имеет друг к другу никакого отношения. Сам хук не срабатывает.


Я неправильно понимаю идеологию? Хуки типа Skin Overloads ведь должны подменять стандартные функции скинов, совпадающие по названию?

Спасибо
  • 0

#5 Оффлайн   Alien2001

    Пользователь


  • Пользователи
  • Репутация
    -1
    • Cообщений: 31
    • Форум:Нет

Отправлено 08 Август 2012 - 22:16

Путем шаманских заклинаний все же удалось запустить хук такого типа.

Возник следующий вопрос: как сделать, чтобы в нем работали xml-ные конструкции, типа следующей:

<if test="topicIsMoved:|:$imgArray['is_moved']">
<span title="{$this->lang->words['pm_moved']}">{parse replacement="t_moved"}</span>
</if>

Жаль все же, что нет какой-то документации :prostite:
  • 0

#6 Оффлайн   Dmitriy427

    Активный


  • Пользователи
  • Репутация
    57
    • Cообщений: 124
    • Форум:3.3.х
    • Город:Тула

Отправлено 08 Август 2012 - 22:59

Жаль все же, что нет какой-то документации

Пожалуйста Войдите или Зарегистрируйтесь чтобы видеть скрытое содержание


  • 0

#7 Гость_Олександр_*


  • Гости
  • Репутация
    0

Отправлено 09 Август 2012 - 17:36

Возник следующий вопрос: как сделать, чтобы в нем работали xml-ные конструкции, типа следующей:

Все что нужно, прописывайте в __construct. При рендеринге шаблона значения будут работать...
Язык:
$this->lang = $this->registry->getClass('class_localization');
Настройки:
$this->settings =& $this->registry->fetchSettings();
Инфа о пользователе:
$this->memberData =& $this->registry->member()->fetchMemberData();
Кеш:
$this->cache = $this->registry->cache();
$this->caches =& $this->registry->cache()->fetchCaches();
Это только часть, остальные в документации, да и вообще вся инфа в документации -

Пожалуйста Войдите или Зарегистрируйтесь чтобы видеть скрытое содержание

вот только не знаю, доступна ли она НЕ для клиентов...

#8 Оффлайн   Alien2001

    Пользователь


  • Пользователи
  • Репутация
    -1
    • Cообщений: 31
    • Форум:Нет

Отправлено 10 Август 2012 - 22:21

Спасибо, буду пытаться.

Документацию смотрел, она, увы, не очень подробная - например, каждый вид хуков описывается 2-3 предложениями
  • 0

#9 Оффлайн   AxR

    Translator (Inactive)


  • Пользователи
  • Репутация
    218
    • Cообщений: 230
    • Форум:3.3.х
    • Город:IpbZona

Отправлено 10 Август 2012 - 23:35

Ну конечно целый рассказ по хуку вам писать не будут :lol:
Т.к переводы также занимают определенное время, и время у Администрации не резиновое - скажите спасибо за то, что есть :dada:
  • 0





Темы с аналогичными тегами: хуки