1 (edited by PunBB 2019.12.10 13:46)

Topic: AnyCode Hook Manager - Добавление хуков через админку

Расширение AnyCode Hook Manager позволяет добавлять код с помощью хуков прямо через админку. Внимание! Используйте AnyCode только, если у вас уже есть достаточно знаний в PHP.
Версия 1.0.0
Русифицирован (исходник ниже)

Инструкция пользователя:
1. После установки, войти на страницу расширения ANYCODE > Интеграции > Введите имя > Добавить
2. Перейти на страницу хуки. Ввести в первое поле имя идентификатора хука. К примеру если это хук
($hook = get_hook('vt_quickpost_pre_display')) ? eval($hook) : null;
то его идентификатор
vt_quickpost_pre_display
3. В поле код хука ввести свой код. Внимание! Расширение поддерживает PHP скрипты, поэтому будьте внимательны.
Для добавления HTML и JS вставлять следующим образом:

?>
HTML разметка
<?php

4. Нажимаем добавить хук и возвращаемся на страницу Интеграции, чтобы активировать созданное решение.

В отдельной теме будут собраны все хуки ядра punbb, пока что выложил хуки нескольких файлов.
Вы можете внести свой вклад публикуя хуки разных файлов. Это будет большая помощь  PunBB_INFO_ICQ/thumbsup

Скачать расширение ANYCODE Tools

2

Re: AnyCode Hook Manager - Добавление хуков через админку

Xakker wrote:

Используйте AnyCode только, если у вас уже есть достаточно знаний в PHP.

Я скажу, что ничего страшного не случится, если вы даже ошибетесь. Просто хук перестанет работать и все. Так что можно экспериментировать сколько влезет.  PunBB_INFO_ICQ/bigsmile

3

Re: AnyCode Hook Manager - Добавление хуков через админку

Xakker wrote:

Скачать расширение AnyCode Hook Manager

"Ошибка - 404
Такой страницы не существует. Возможно вас заинтересуют популярные темы форума."

Очень даже может быть, что заинтересуют... Но мне всё равно интересно, почему такой страницы не существует. : )

4

Re: AnyCode Hook Manager - Добавление хуков через админку

@anastasiya-kais, для начала посмотрите логи PHP,  они подскажу в какую сторону копать.

5 (edited by satsana 2019.08.23 12:57)

Re: AnyCode Hook Manager - Добавление хуков через админку

@PunBB, про логи - это немножко в другую тему, я сейчас туда напишу, что нарыла. А 404 - это не про них, это ссылка на скачивание хук-менеджера не работает.

6

Re: AnyCode Hook Manager - Добавление хуков через админку

@PunBB, наверное стоит поудалять ссылки на старые расширения, толку от них, по большому счету нет, а вот с толку новичков сбивают.  PunBB_INFO_ICQ/whipped


https://punbb.softplaza.net/uploads/images/2019/08/c268ab525555d2dc4cea5b51e548853f.jpg

2

7

Re: AnyCode Hook Manager - Добавление хуков через админку

@sempaiPunBB_INFO_ICQ/thumbsup согласен

8

Re: AnyCode Hook Manager - Добавление хуков через админку

@PunBB, текстовая замена ссылок - огонь!  PunBB_INFO_ICQ/thumbsup

Чуть не лопнул от смеха!!!  PunBB_INFO_ICQ/bigsmile  PunBB_INFO_ICQ/bigsmile  PunBB_INFO_ICQ/bigsmile

9

Re: AnyCode Hook Manager - Добавление хуков через админку

@sempai, хорошее расширение, я пользую. Не подскажете кстати хук как мне автоматом навесить alt на картинки из темы сообщения или как-то иначе?

10

Re: AnyCode Hook Manager - Добавление хуков через админку

@kirpich, посмотри в Pan Seo как там сделано. Сам айди хука уже не помню PunBB_INFO_ICQ/no

$matches[2]

Еще раз посмотрел, нету у нас на сервере этого расширения  PunBB_INFO_ICQ/pardon
Если у кого есть архив, приложите аттач, пусть люди балуются


$matches[2]

@kirpich, если не ошибаюсь хук:

vt_row_pre_display

Этот код из расширения Pan Seo, мож чем то поможет

<?php

if (!defined('FORUM')) die();

if ($forum_config['o_pan_seo_keywords_strong_msg'] == '1' && $forum_page['item_count'] == '1')
{
   
   if(!preg_match_all('/<img[^>]+>/i', $forum_page['message']['message'], $search_img) )
   {

      require_once (FORUM_ROOT.'include/search_idx.php');

      $keywords = implode(' ', array_map('forum_trim', array_unique(split_words($cur_topic['subject']))));
      $topic_subject = explode(" ", $keywords);

      foreach($topic_subject as $key => $value) {
         $forum_page['message']['message'] = str_ireplace($value, '<strong>'.$value.'</strong>', $forum_page['message']['message']);
      }
   }
   
} else if ($forum_config['o_pan_seo_collocations_links'] != '0' && $forum_page['item_count'] > '1') {
   
   //Delkete Tags In Content
   $words = preg_replace("'<(code|blockquote)[^>]*?>.*?</(code|blockquote)>'si", "", $forum_page['message']['message']);
   //Delete Tags
   $words = preg_replace('/(<([^>]+)>)/U', '', $words);
   //Delete Punctuation Simbols
   $words = preg_replace('/[[:punct:]]/', ' ', $words);
   
   $arr_words = explode(' ', $words);
   $arr_words = array_diff($arr_words, array(''));
   $arr_words = array_values($arr_words);
   
   $w_two = 1;
   $w_tree = 2;
   
   $collocations = array();
   foreach($arr_words as $key => $value)
   {
      if (array_key_exists($w_two, $arr_words) && array_key_exists($w_tree, $arr_words) ) 
      {
         $collocations[] = $arr_words[$key].' '.$arr_words[$w_two].' '.$arr_words[$w_tree];
      }
      $w_two++;
      $w_tree++;
   }
   
   $ref_count = 0;
   $reference_link = array();
   foreach($collocations as $p_key => $p_value) 
   {
      if(isset($arr_all_subject) ) 
      {
         foreach($arr_all_subject as $t_id => $t_subject) 
         {
            if(stripos($t_subject, ' '.$p_value) && $id != $t_id)  
            {
               $reference_link[$p_key] = forum_link($forum_url['topic'], array($t_id, sef_friendly($t_subject)));
            }
         }
         
         if(isset($reference_link[$p_key]) && $ref_count < $forum_config['o_pan_seo_collocations_links'])
         {
            $forum_page['message']['message'] = str_replace(' '.$p_value.' ', ' <a href="'.$reference_link[$p_key].'">'.$p_value.'</a> ', $forum_page['message']['message']);
            $ref_count++;
         }
      }
   }
}


if ($forum_config['o_pan_seo_img_title'] == '1') {
   if (!strpos($forum_page['message']['message'], "title="))
      $forum_page['message']['message'] = str_replace('<img', '<img title="'.forum_htmlencode($cur_topic['subject']).'"' , $forum_page['message']['message']);
}

1

11 (edited by PunBB 2019.12.10 13:42)

Re: AnyCode Hook Manager - Добавление хуков через админку

@PunBB, благодарю! Вроде крайняя и единственная версия эта, разработчику было наверное не выгодно ее развивать, так как готовые  расширения писать за деньги выгодней. А тут такое.. Если развить, можно сразу список хуков к ней навесить и включай что хочешь на выбор.

2

12

Re: AnyCode Hook Manager - Добавление хуков через админку

kirpich wrote:

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

Кстати, а это мысль. В принципе, список хуков есть, остается загнать в массив и в опшн вывести выпадающий список  PunBB_INFO_ICQ/dance

$matches[2]

Ага, список есть, но не полный, только три файла.

https://punbb.softplaza.net/t-569.html
У кого есть возможность и желание можете помочь в пополнении списка хуков, я думаю, что сами еще не раз будете обращаться к тому списку  PunBB_INFO_ICQ/wink

1

13

Re: AnyCode Hook Manager - Добавление хуков через админку

Что-то я определённо не так делаю. : ( Добавила скрипт на jQuery в хук hd_end, но оказался он в итоге в самом начале кода страницы, выше <head>. Подскажите, пожалуйста, как сделать так, чтобы он именно в конце хедера выводился?

В данный момент он выглядит так
?><script>
  $('#navprofile').add('#subscript').add('#navregister').add('#navlogin').add('#navlogout').insertAfter('#visit-links span:last-child');
  var mnlst = $('#visit-links li');
  for (x=0; x<mnlst.length; x++) {
    $(mnlst[x]).replaceWith($('<span>').html($(mnlst[x]).html()));
  }
</script><?php

14 (edited by PunBB 2019.09.08 07:53)

Re: AnyCode Hook Manager - Добавление хуков через админку

Для подключения скриптов и стилей в punbb существуют специальные функции.
Спрячьте ваш js код в файл,а файл в корень форума, а затем подключите в хуке следующим образом:

$forum_loader->add_js($base_url.'/jquery.js', array('type' => 'url', 'group' => FORUM_JS_GROUP_COUNTER));

$matches[2]

Либо запишите ваш скрипт в переменную, чтобы не создавать файл:

  $my_variable = "$('#navprofile').add('#subscript').add('#navregister').add('#navlogin').add('#navlogout').insertAfter('#visit-links span:last-child');
  var mnlst = $('#visit-links li');
  for (x=0; x<mnlst.length; x++) {
    $(mnlst[x]).replaceWith($('<span>').html($(mnlst[x]).html()));
  }";

$forum_loader->add_js($my_variable, array('type' => 'inline', 'weight' => 50, 'group' => FORUM_JS_GROUP_SYSTEM));

15 (edited by satsana 2019.09.09 05:37)

Re: AnyCode Hook Manager - Добавление хуков через админку

PunBB wrote:

в punbb существуют специальные функции

Можно где-то почитать про них?

PunBB wrote:

подключите в хуке следующим образом

Подключила. Подключилось в конце страницы... И что ещё хуже - jQuery, оказывается, подключен ещё ниже, так что его синтаксис в скрипте не распознаётся. : (( Вопрос с возможностью подключения (и срабатывания!) скриптов на jQuery в произвольных местах страницы пока отпадает...
Upd: Ну или совсем отпадает. Ага, я двоечница, привыкшая видеть jQuery в хедере, буду исправляться. : )
Upd2: Завернула код в функцию, повесила её на событие DOMContentLoaded. Работает.

16

Re: AnyCode Hook Manager - Добавление хуков через админку

Да, для использования скриптов jQuery вначале следует установить расширение Pun jQuery, оно подключает библиотеку jQuery.

Также следите, чтобы подключаемые скрипты были после подключенной библиотеки. Это настраивается параметром:

'weight' => 50,

17

Re: AnyCode Hook Manager - Добавление хуков через админку

PunBB wrote:

Это настраивается параметром 'weight' => 50

И каким он должен быть, чтобы скрипт оказался ниже jQuery? 50 явно маловато для этого...
P.S. Вопрос про "почитать про специальные функции punbb" всё ещё актуален.

18

Re: AnyCode Hook Manager - Добавление хуков через админку

anastasiya-kais wrote:

почитать про специальные функции punbb" всё ещё актуален.

Ок, специальной инструкции по функциям нет, но как нибудь могу написать, чуть позже, эта неделя насыщенная...

1

19

Re: AnyCode Hook Manager - Добавление хуков через админку

@PunBB, это было бы шикарно!

20 (edited by eduard-kuznetsov 2020.03.24 05:38)

Re: AnyCode Hook Manager - Добавление хуков через админку

Здравствуйте. Установил расширение, но не могу почему-то добавить solution. Ввожу имя, жму Add solution.
https://punbb.softplaza.net/uploads/images/2020/03/8ee6696b0f1ffdc275c3da23cdd75239.jpg
Потом перехожу на вкладку Hooks, а там написано: Before add hook to solution create it.
https://punbb.softplaza.net/uploads/images/2020/03/37c97fda650087534d89fbfd3b7f5e30.jpg
Подскажите, пожалуйста, как это исправить? Или расширение не совместимо с PunBB 1.4.4?

21

Re: AnyCode Hook Manager - Добавление хуков через админку

Могу только дать подсказку, файл hooks.php:
Показывается область:

else {
?>
            <div class="ct-box">
               <p><?php echo $lang_anycode['Need solution'] ?></p>
            </div>
         </fieldset>
<?php
}

Потому что выше:

if  ($num_sol) {

у переменной $num_sol значение FALSE.

Я предполагаю, что значение вызывается вследствии еще выше кода:

$num_sol = $forum_db->num_rows($result);

Подозреваю, что функция num_rows() не выдает ни одну строку.

Какой тип бд вы используете. Проверьте, есть ли хотя бы одна строка в таблице данного расширения.

Ps: если это Sqlite, то работать не будет. Не поддерживалось раньше num_rows().

1

22 (edited by eduard-kuznetsov 2020.03.24 08:35)

Re: AnyCode Hook Manager - Добавление хуков через админку

Да. Sqlite. PunBB_INFO_ICQ/sad А вручную можно как-то назначить код хуку?

23 (edited by PunBB 2020.03.24 09:26)

Re: AnyCode Hook Manager - Добавление хуков через админку

Вручную много работы. Проще драйвера  переписать.
Вот смотрите: /include/dblayer/sqlite3.php

   function num_rows($query_id = 0)
   {
      return false;
   }

Видите откуда значение false?

Нужно поискать новые драйвера в интернете.
Например, что то вроде:
https://www.sqlitetutorial.net/sqlite-count-function/

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

1

24

Re: AnyCode Hook Manager - Добавление хуков через админку

Спасибо, Вам, за ответ. В другой теме сейчас напишу.