Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
lifespirit

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

Рекомендованные сообщения

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

 

 

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение
10/04/14 17:16 (изменено)

Я просто воткнул кусок кода в 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

Поделиться сообщением


Ссылка на сообщение

Это подключение ядра, которое вам очевидно не нужно

           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 вызовет парсер ббкодов), в метод который эти ббкоды обрабатывает, и снова запустит ваш код. Попахивает рекурсией.

Поделиться сообщением


Ссылка на сообщение

Убрал то, что вы указали. Получилось:

		$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, только уже от другого пользователя?

Поделиться сообщением


Ссылка на сообщение

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

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

 

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

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

public function handleData($insert)

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

 

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

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

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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

 

<?php
class dice {
public function __construct();
{

}

public function handleData($insert){
	print_r $insert;
	return $insert;
}
}
?>

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

Поделиться сообщением


Ссылка на сообщение

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

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

 

    public function __construct();

; - не нужно

 

print_r $insert;

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

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

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

 

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

 

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

 

P.S.

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

Поделиться сообщением


Ссылка на сообщение

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

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

 

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

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

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...