Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
lifespirit

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

Recommended Posts

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

 

 

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

 

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

Edited by lifespirit

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

 

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

public function handleData($insert)

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

 

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

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

  • Upvote 1

Share this post


Link to post
Share on other sites

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

 

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

}

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

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

Share this post


Link to post
Share on other sites

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

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

 

    public function __construct();

; - не нужно

 

print_r $insert;

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

  • Upvote 1

Share this post


Link to post
Share on other sites

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

 

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

 

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

 

P.S.

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

Share this post


Link to post
Share on other sites

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

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

 

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...