Достать topicID и forumID в коде parser.php - Страница 2 - Дизайн и модификация Invision Power Board

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

 

Правила раздела

Здесь обсуждаются вопросы по настройке и администрированию форумов IPB 3.x.
Пожалуйста, не оффтопьте, если зашли сюда случайно, и обратите внимание на соседние разделы.
Установка, настройка и обслуживание форумов IPB 2.x.
Оформление форумов, включая верстку скинов.
Размещение рекламы на форумах.
SEO оптимизация форума.
Техническая поддержка наших скинов и модов.

СвернутьПрикрепленные теги

Теги не найдены

  • 2 Страниц +
  • 1
  • 2

Достать topicID и forumID в коде parser.php

#16 Пользователь не на сайте   lifespirit ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 17
  • Регистрация: 26-Сентябрь 14
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 04 Октябрь 2014 - 19:07

В общем дописал я в parser.php обработчик кубов. В функцию editorToHtml. Всё работает, если кидать от имени пользователя, но никак не получается кидать всегда от определённого пользователя. Если просто вставить код:

Просмотреть сообщениеsiv1987 29 Сентябрь 2014 - 16:05 сказал(а):



то просто ничего не происходит. Помогите советом пожалуйста.
0

#17 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 246
  • Регистрация: 20-Март 09
  • Репутация: 2 062
  • IPB version:3.1.x
 

Отправлено 04 Октябрь 2014 - 19:16

Для API - $post->setAuthor( 1 ) определяет от какого пользователя будет публиковаться пост.
0

#18 Пользователь не на сайте   lifespirit ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 17
  • Регистрация: 26-Сентябрь 14
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 04 Октябрь 2014 - 20:15

Я просто воткнул кусок кода в parser.php в функцию editortohtml . Если в посте есть кубики, то $editor просто чистится и преобразуется в сообщение о кубах. Если я кидаю кубики от пользователя, сообщение редактируется и нормально поститься от его же имени. Мне нужно от другого пользователя запостить сообщение. Я втыкаю в конец функции
			define('IPS_ENFORCE_ACCESS', true);
			require_once( 'initdata.php' );
			require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );
			require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );

			$registry = ipsRegistry::instance();
			$registry->init();

			$classToLoad = IPSLib::loadLibrary( IPSLib::getAppDir( 'forums' ) . '/sources/classes/post/classPost.php', 'classPost', 'forums' );
			$post = new $classToLoad( $registry );
			
			$post->setForumID( $this->request['f'] ); 
			$post->setTopicID($this->request['t']);
			$post->setAuthor(3);
			$post->setPostContent(implode("", $answer));
			
			if($post->addReply()) {
			} else {
			$editor = $post->_postErrors;
			}


но при таком раскладе отправка поста тупо виснет и всё. Может я что не так делаю? Вернее я почти наверняка не так что то делаю. Подскажите пожалуйста.

Сообщение изменено: lifespirit (04 Октябрь 2014 - 20:15)

0

#19 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 246
  • Регистрация: 20-Март 09
  • Репутация: 2 062
  • IPB version:3.1.x
 

Отправлено 04 Октябрь 2014 - 20:24

Это подключение ядра, которое вам очевидно не нужно
            define('IPS_ENFORCE_ACCESS', true);
            require_once( 'initdata.php' );
            require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );
            require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );

            $registry = ipsRegistry::instance();
            $registry->init();

Ниже по коду $registry заменить на $this->registry
И у вас очень интересно получается. Вы вставили вызов API в котором обрабатываются ббкоды (а setPostContent вызовет парсер ббкодов), в метод который эти ббкоды обрабатывает, и снова запустит ваш код. Попахивает рекурсией.
0

#20 Пользователь не на сайте   lifespirit ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 17
  • Регистрация: 26-Сентябрь 14
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 04 Октябрь 2014 - 21:46

Убрал то, что вы указали. Получилось:
			$classToLoad = IPSLib::loadLibrary( IPSLib::getAppDir( 'forums' ) . '/sources/classes/post/classPost.php', 'classPost', 'forums' );
			$post = new $classToLoad( $this->registry );
			
			$post->setForumID( $this->request['f'] ); 
			$post->setTopicID($this->request['t']);
			$post->setAuthor(3);
			$post->setPostContent(implode("", $answer));
			
			if($post->addReply()) {
			} else {
			$editor = $post->_postErrors;
			}

Отправка сообщения по прежнему висит. Может действительно рекурсия, хотя весь мною написанный код не работает если в тексте сообщения нету кубов, так что условие для рекурсии не выполнено. Может можно как то сменить id пользователя-отправителя сообщения непосредственно из парсера и дальше протолкнуть сообщение в $editor, только уже от другого пользователя?
0

#21 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 246
  • Регистрация: 20-Март 09
  • Репутация: 2 062
  • IPB version:3.1.x
 

Отправлено 04 Октябрь 2014 - 21:53

Имхо, логически вы не правильно делаете. Нужно перед вставкой в БД обработать пост, вырезать и сохранить нужный текст. После вставке основного сообщения, не в парсере ббкодов, запустить обработку спарсеных данных если таковы имеются. Для этого есть хуки, разные dataHookPoint и тд.
Виснет ни о чем не говорят. Тут даже ошибки нет. Пробуйте продебажить код echo - exit, проверьте что выполняется, сколько раз это выполняется.

Просмотреть сообщениеlifespirit сказал(а):

написанный код не работает если в тексте сообщения нету кубов

Возможно, но в примере этого не видно.
0

#22 Пользователь не на сайте   lifespirit ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 17
  • Регистрация: 26-Сентябрь 14
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 04 Октябрь 2014 - 22:35

Я пресмотрел задачу и теперь просто чищу пост если в нём есть кубики и вместо него публикую пост с брошенными кубиками от другого юзера. Спасибо за подсказку. Посмотрю хуки.
0

#23 Пользователь не на сайте   lifespirit ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 17
  • Регистрация: 26-Сентябрь 14
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 07 Октябрь 2014 - 11:13

Пробую набросать хук. В настройках использую "Хук данных", "Post Data". Подскажите пожалуйста как получить данные для обработки. Они сами загружаются при вызове хука в переменную какой то определённой функции? Пока что отправка сообщения просто виснет. Вот файл хука: https://yadi.sk/d/w89xLdz9braNb .
0

#24 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 246
  • Регистрация: 20-Март 09
  • Репутация: 2 062
  • IPB version:3.1.x
 

Отправлено 07 Октябрь 2014 - 11:24

public function handleData($insert)

$insert будет содержать массив данных поста - print_r( $insert );

$dsize = [6, 8, 12, 6, 8, 12, 100];

Такая форма записи появилась в php начиная с версии 5.4. Пока лучше массивы создавать по старому через array()
1

#25 Пользователь не на сайте   lifespirit ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 17
  • Регистрация: 26-Сентябрь 14
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 07 Октябрь 2014 - 18:15

В общем я немного не понимаю. =( Выключаю хук, всё ок. Включаю хук, даже если в нём только:

<?php
class dice {
	public function __construct();
	{
	
	}
	
	public function handleData($insert){
		print_r $insert;
		return $insert;
	}
}
?>

отправка сообщений сразу наглухо виснет. Отладка форума включена на 3 уровень и в логах пустота. Из parser.php я всё рукописное убрал сразу как только начал копать в сторону хука.
0

#26 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 246
  • Регистрация: 20-Март 09
  • Репутация: 2 062
  • IPB version:3.1.x
 

Отправлено 07 Октябрь 2014 - 18:22

Просмотреть сообщениеlifespirit сказал(а):

отправка сообщений сразу наглухо виснет.

Вы скорее всего отправляете через аджакс (быстрый ответ), а для него print_r $insert; уже является недопустимым. Если хотите дебажить отправляйте из расширенной формы.

    public function __construct();

; - не нужно

print_r $insert;

Для print_r нужно указывать скобки.
1

#27 Пользователь не на сайте   lifespirit ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 17
  • Регистрация: 26-Сентябрь 14
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 07 Октябрь 2014 - 23:09

Всё. Победа. Я победил этот хук. Как экспортировать хук не нашёл так что от рабочая версия php для 3.4.x: https://yadi.sk/d/4J7VMu9xbsQq6

Копируете файл в папку hooks в корне вашего форума и настраиваете DataHook с функцией postAddReply на этот файл. Вин.

siv1987, большое спасибо. Теперь пару дней отдыха и буду переделывать text editor, но это уже будет другая тема на форуме.

P.S.
Предварительно надо поправить в файле id юзера, от которого будут поститься кубы и адреса для картинок результатов бросков (если у вас та же система). Ну и если у вас другая система бросков (а у вас она почти наверняка другая, потому что тут система настольных стар ворсов), надо немного поправить cube.php. Если нужны подсказки или есть вопросы по файлу, пишите.
0

#28 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 246
  • Регистрация: 20-Март 09
  • Репутация: 2 062
  • IPB version:3.1.x
 

Отправлено 07 Октябрь 2014 - 23:44

Просмотреть сообщениеlifespirit сказал(а):

Как экспортировать хук не нашёл

В ./conf_global.php включить режим разработчика

define('IN_DEV', IN_ACP ? 1 : 0);

В свойства хука появится экспорт.
0

Сообщить об этой теме:


  • 2 Страниц +
  • 1
  • 2


Быстрый ответ

  

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых


Контактная информация

Вопросы по работе сайта

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 – 3.4 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2016 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна