Pavel.M Опубликовано 7 Сентября 2006 Жалоба Поделиться Опубликовано 7 Сентября 2006 Как создать тему через API чтобы обновилась статистика?И при этом не пропали форумы. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 7 Сентября 2006 Жалоба Поделиться Опубликовано 7 Сентября 2006 Так прочитать комментарии в файлах самого API и поиском по форуму воспользоваться, нэ? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Pavel.M Опубликовано 7 Сентября 2006 Автор Жалоба Поделиться Опубликовано 7 Сентября 2006 Так прочитать комментарии в файлах самого API и поиском по форуму воспользоваться, нэ? А вот и НЭ! =)И по форуму искал - страниц семь топиков отчитал... При создании топика без "delay_rebuild = 1" все форумы пропадают; даже в админке. Пробовал при включенном delay_rebuild заюзать tap_rebuild_forum($forumID) - исчезают все топики форума $forumIDА при tap_rebuild_stats() - пропадают все. Однако, после того как что-то пропадает, при создании нового форума либо при ресинхронизации вручную (с открытой страницы управления форумами) - все встает на свои места. Вопрос: это баг о котором я не знаю или как создавать топики и посты с грамотной ресинхронизацией статистики? P.S.: все делаю по "EXAMPLE USAGE". Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 7 Сентября 2006 Жалоба Поделиться Опубликовано 7 Сентября 2006 Вы на пол пути остановились. Делайте дебаг глубже. Интерфес содержит только то, что описано в exmpl, следовательно делаете Вы все правильно. Работает, видимо что-то не так. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Pavel.M Опубликовано 7 Сентября 2006 Автор Жалоба Поделиться Опубликовано 7 Сентября 2006 Интерфес содержит только то, что описано в exmpl, следовательно делаете Вы все правильно. Работает, видимо что-то не так. И я к тому же склоняюсь! =) Но если я все делаю по юзадж, перепробовал во всех позах - и после создания с задержкой и отдельно...а все к одному - tap_rebuild_forum - прячет все форумы, а tap_rebuild_stats - ваще ниче не делает. ВЕЗДЕ где встречал РАБОЧИЙ код по созданию топиков/постов, там обязательно фигурирует delay_rebuild = 1зачем это? позже понял - без него не работает (пропадают форумы). я на 97% уверен что это баг, но фиксов не видел. Вы лично добавляли топики/посты через АПИ? && статистика обновлялась? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 7 Сентября 2006 Жалоба Поделиться Опубликовано 7 Сентября 2006 Ну, видимо, завтра я этим и буду заниматься =) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Pavel.M Опубликовано 7 Сентября 2006 Автор Жалоба Поделиться Опубликовано 7 Сентября 2006 Ну, видимо, завтра я этим и буду заниматься =) Буду ждать с нетерпением результатов Ваших занятий =) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Dr.Freddy Опубликовано 8 Сентября 2006 Жалоба Поделиться Опубликовано 8 Сентября 2006 Я, может, чего-то не понял, но у меня топики создавались и статистика обновлялась. Нечто в духе: $api = new api_topics_and_posts(); $api->ipsclass =& $this->ipsclass; $api->set_author_by_name( $poster_name ); $api->set_post_content( $content['text'] ); $api->set_forum_id( $forum_id ); $api->set_topic_title( $content['title'] ); $api->set_topic_description( '' ); $api->topic_settings['topic_date'] = $content['time']; $api->topic_invisible = $content['hide']; $api->set_topic_state('open'); $api->create_new_topic(); Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 8 Сентября 2006 Жалоба Поделиться Опубликовано 8 Сентября 2006 <?php require_once( './sources/api/api_topics_and_posts.php' ); $api = new api_topics_and_posts(); $api->api_init(); // ADD POST REPLY $api->set_author_by_name('admin'); $api->set_post_content("<b>Hello World!</b> :D"); $api->set_topic_id( 1 ); # Default for show_signature is 1, added here for completeness $api->post_settings['show_signature'] = 1; # Optionally turn off rebuild to not rebuild topic, forum and stats # $api->delay_rebuild = 1; $api->create_new_reply(); echo "Post Created", '<br>'; // ADD NEW TOPIC $api->set_author_by_name('admin'); $api->set_post_content("<b>Hello World!</b> :D"); $api->set_forum_id( 2 ); $api->set_topic_title('Hello World'); $api->set_topic_description('I am the description'); $api->set_topic_state('open'); $api->create_new_topic(); echo "Topic Created"; ?> Собственно никаких проблем. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Pavel.M Опубликовано 8 Сентября 2006 Автор Жалоба Поделиться Опубликовано 8 Сентября 2006 Я, может, чего-то не понял, но у меня топики создавались и статистика обновлялась. Нечто в духе: $api = new api_topics_and_posts(); $api->ipsclass =& $this->ipsclass; $api->set_author_by_name( $poster_name ); $api->set_post_content( $content['text'] ); $api->set_forum_id( $forum_id ); $api->set_topic_title( $content['title'] ); $api->set_topic_description( '' ); $api->topic_settings['topic_date'] = $content['time']; $api->topic_invisible = $content['hide']; $api->set_topic_state('open'); $api->create_new_topic(); Именно по этому варианту и делаю.Но если не ставить "delay_rebuild = 1" то пропадают все форумы. <?php require_once( './sources/api/api_topics_and_posts.php' ); $api = new api_topics_and_posts(); $api->api_init(); // ADD POST REPLY $api->set_author_by_name('admin'); $api->set_post_content("<b>Hello World!</b> :D"); $api->set_topic_id( 1 ); # Default for show_signature is 1, added here for completeness $api->post_settings['show_signature'] = 1; # Optionally turn off rebuild to not rebuild topic, forum and stats # $api->delay_rebuild = 1; $api->create_new_reply(); echo "Post Created", '<br>'; // ADD NEW TOPIC $api->set_author_by_name('admin'); $api->set_post_content("<b>Hello World!</b> :D"); $api->set_forum_id( 2 ); $api->set_topic_title('Hello World'); $api->set_topic_description('I am the description'); $api->set_topic_state('open'); $api->create_new_topic(); echo "Topic Created"; ?> Собственно никаких проблем. У меня v2.1.6 и API 2.1 там юзадж как у Dr.Freddy.Однако, я пробовал и этот вариант - фатал еррор. Встречал его чаще в гугле - решил от старой версии, потому как выпадает в PHP Fatal error: Call to a member function on a non-object in /path/sources/ipsclass.php on line 405в ipclass там обращение к $this->DB, который, не инициализирован.причем это при api_init() Посмотрел в api_init() перед инициализацией DB есть проверка ! defined( 'IPSCLASS_DB_LOADED' ) Если у меня раньше, глобально определен $ipsclass (нужен юзеров идентифицировать), то когда у него определилась DB при init_db_connection() он делает define( 'IPSCLASS_DB_LOADED', 1 ) =)...С этого момента при использовании далее API, api_init() перестает инициализировать DB и я получаю PHP Fatal error =)) Бага? Короче, последний вариант, в моем случае не работает. Как инициализировал $ipsclass ниже.Было меньше, но я все что подозревал - повключал =) define( 'IPB_THIS_SCRIPT', 'public' ); define( 'IPB_LOAD_SQL' , 'queries' ); require_once('/path/forum/init.php'); require_once ROOT_PATH . "sources/ipsclass.php"; require_once ROOT_PATH . "sources/classes/class_display.php"; require_once ROOT_PATH . "sources/classes/class_session.php"; require_once ROOT_PATH . "sources/classes/class_forums.php"; require_once KERNEL_PATH . "class_converge.php"; require_once ROOT_PATH . "conf_global.php"; $ipsclass = new ipsclass(); $ipsclass->vars = $INFO; $Debug = new Debug; $Debug->startTimer(); $ipsclass->init_db_connection(); $ipsclass->print = new display(); $ipsclass->print->ipsclass =& $ipsclass; $ipsclass->sess = new session(); $ipsclass->sess->ipsclass =& $ipsclass; $ipsclass->forums = new forum_functions(); $ipsclass->forums->ipsclass =& $ipsclass; $ipsclass->parse_incoming(); $ipsclass->converge = new class_converge( $ipsclass->DB ); $ipsclass->initiate_ipsclass(); $ipsclass->member = $ipsclass->sess->authorise(); может, я чет не то делаю? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 8 Сентября 2006 Жалоба Поделиться Опубликовано 8 Сентября 2006 http://dev.ibresource.ru/ruswiss/http://dev.ibresource.ru/ruswiss/1.phphttp://dev.ibresource.ru/ruswiss/1.phps Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Pavel.M Опубликовано 8 Сентября 2006 Автор Жалоба Поделиться Опубликовано 8 Сентября 2006 GiV, я верю что у Вас все работает. Я не говорю что Вы меня обманываете =)может я криво объяснил... если я глобально создаю ipsclass, то при его инициализации, выставляется глобальная константа IPSCLASS_DB_LOADED в 1 при любом вызове init_db_connection это происходит(ipsclass.php:558): if ( ! defined( 'IPSCLASS_DB_LOADED' ) ) { define( 'IPSCLASS_DB_LOADED', 1 ); } при вызове api_init() идет проверка - "а не инициализировали ли мы уже DB" посредством глобальной константы IPSCLASS_DB_LOADED - если 1, то ниче не делаем. api_core.php:164 if ( ! defined( 'IPSCLASS_DB_LOADED' ) ) { $this->ipsclass->vars['sql_force_new_connection'] = 1; $this->ipsclass->init_db_connection(); } Поэтому, DB никогда не инициализируется в объекте API елси экземпляр ipsclass создан! Если концепция использования API позволяет создавать экземпляр класса ipsclass в контексте создания топиков, то это 100% баг. Короче, в моем случае, вызов api_init() приведет к Fatal error. Поэтому я пользую юзадж из файла api_topics_and_posts.php, где ссылку на ipsclass можно назначить$api->ipsclass =& $this->ipsclass; Помогите разобраться - почему ТАК не работает обновление статистики?Я верю что тем путем все работает, а как быть в моем случае? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 8 Сентября 2006 Жалоба Поделиться Опубликовано 8 Сентября 2006 $this->ipsclass->init_load_cache( array('rss_export', 'bbcode', 'badwords', 'emoticons', 'settings', 'group_cache', 'systemvars', 'skin_id_cache', 'forum_cache', 'moderators', 'stats') ); Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Pavel.M Опубликовано 8 Сентября 2006 Автор Жалоба Поделиться Опубликовано 8 Сентября 2006 Надеюсь я правильно понял - это после создания топика вставлять?Вставил. $api->delay_rebuild = 1; $api->create_new_topic(); $api->ipsclass->init_load_cache(array('rss_export', 'bbcode', 'badwords', 'emoticons', 'settings', 'group_cache', 'systemvars', 'skin_id_cache', 'forum_cache', 'moderators', 'stats')); Топик создан, форумы на месте, стат. НЕ обновилась... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 8 Сентября 2006 Жалоба Поделиться Опубликовано 8 Сентября 2006 Да вообще то перед $api->ipsclass = & $this->ipsclass Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Pavel.M Опубликовано 8 Сентября 2006 Автор Жалоба Поделиться Опубликовано 8 Сентября 2006 Да вообще то перед $api->ipsclass = & $this->ipsclass =) дык это понятноglobal $ipsclass; $api->ipsclass = &$ipsclass; на всякий случай весь кусок: global $ipsclass, $user; require_once('/path/sources/api/api_topics_and_posts.php'); $api = new api_topics_and_posts(); $api->ipsclass = &$ipsclass; $api->set_author_by_id($user->getID()); $api->set_topic_description($df->russian($item->get('date'), true)); $api->set_post_content($content); $api->set_forum_id($forumID); $api->set_topic_title($postTitle); $api->set_topic_state('open'); $api->delay_rebuild = 1; $api->create_new_topic(); $api->ipsclass->init_load_cache(array('rss_export', 'bbcode', 'badwords', 'emoticons', 'settings', 'group_cache', 'systemvars', 'skin_id_cache', 'forum_cache', 'moderators', 'stats')); делал и $ipsclass->init_load_cache(array('rss_export', 'bbcode', 'badwords', 'emoticons', 'settings', 'group_cache', 'systemvars', 'skin_id_cache', 'forum_cache', 'moderators', 'stats')); ааа сорри перед строчкой "$api->ipsclass = &$ipsclass;" сделать init_load_cache?сделал. ничего нового. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 8 Сентября 2006 Жалоба Поделиться Опубликовано 8 Сентября 2006 А такое у Вас работает?<?php define( 'IPB_THIS_SCRIPT', 'api' ); require_once( 'init.php' ); $INFO = array(); //-------------------------------- // Load our classes //-------------------------------- require_once ROOT_PATH . "sources/ipsclass.php"; require_once ROOT_PATH . "conf_global.php"; # Initiate super-class $ipsclass = new ipsclass(); $ipsclass->vars = $INFO; $ipsclass->base_url = $ipsclass->vars['board_url'].'/index.'.$ipsclass->vars['php_ext'].'?'; $ipsclass->vars['sql_force_new_connection'] = 1; $ipsclass->init_db_connection(); //------------------------------- // DISPLAY Object? //------------------------------- require_once ROOT_PATH . "sources/classes/class_display.php"; $ipsclass->print = new display(); $ipsclass->print->ipsclass =& $ipsclass; //------------------------------- // SESSION Object? //------------------------------- require_once ROOT_PATH . "sources/classes/class_session.php"; $ipsclass->sess = new session(); $ipsclass->sess->ipsclass =& $ipsclass; //------------------------------- // FORUMS Object? //------------------------------- require_once ROOT_PATH . "sources/classes/class_forums.php"; $ipsclass->forums = new forum_functions(); $ipsclass->forums->ipsclass =& $ipsclass; //------------------------------- // Converge Object? //------------------------------- require_once KERNEL_PATH . "class_converge.php"; $ipsclass->converge = new class_converge( $ipsclass->DB ); //------------------------------- // Caches init? //------------------------------- $ipsclass->init_load_cache( array('rss_export', 'bbcode', 'badwords', 'emoticons', 'settings', 'group_cache', 'systemvars', 'skin_id_cache', 'forum_cache', 'moderators', 'stats') ); $ipsclass->initiate_ipsclass(); $ipsclass->md5_check = $ipsclass->return_md5_check(); $ipsclass->parse_incoming(); if ( ! is_object( $ipsclass->forums ) ) { $ipsclass->forums->ipsclass =& $ipsclass; $ipsclass->forums->strip_invisible = 1; $ipsclass->forums->forums_init(); } $ipsclass->load_skin(); require_once( ROOT_PATH . '/sources/api/api_topics_and_posts.php' ); $api = new api_topics_and_posts(); $api->ipsclass =& $ipsclass; // ADD POST REPLY $api->set_author_by_name('admin'); $api->set_post_content("<b>Hello World!</b> :D"); $api->set_topic_id( 1 ); # Default for show_signature is 1, added here for completeness $api->post_settings['show_signature'] = 1; # Optionally turn off rebuild to not rebuild topic, forum and stats # $api->delay_rebuild = 1; $api->create_new_reply(); echo "Post Created", '<br>'; // ADD NEW TOPIC $api->set_author_by_name('admin'); $api->set_post_content("<b>Hello World!</b> :D"); $api->set_forum_id( 2 ); $api->set_topic_title('Hello World'); $api->set_topic_description('I am the description'); $api->set_topic_state('open'); $api->create_new_topic(); echo "Topic Created"; ?> Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Pavel.M Опубликовано 8 Сентября 2006 Автор Жалоба Поделиться Опубликовано 8 Сентября 2006 А такое у Вас работает? Да, спасибо!! короче, не хватало только$ipsclass->init_load_cache( array('rss_export', 'bbcode', 'badwords', 'emoticons', 'settings', 'group_cache', 'systemvars', 'skin_id_cache', 'forum_cache', 'moderators', 'stats')); вот теперь рабочий вариант:define( 'IPB_THIS_SCRIPT', 'api' ); require_once('/path/forum/init.php'); $INFO = array(); require_once ROOT_PATH . "sources/ipsclass.php"; require_once ROOT_PATH . "conf_global.php"; $ipsclass = new ipsclass(); $ipsclass->vars = $INFO; $ipsclass->vars['sql_force_new_connection'] = 1; $ipsclass->init_db_connection(); require_once ROOT_PATH . "sources/classes/class_session.php"; $ipsclass->sess = new session(); $ipsclass->sess->ipsclass =& $ipsclass; require_once ROOT_PATH . "sources/classes/class_forums.php"; $ipsclass->forums = new forum_functions(); $ipsclass->forums->ipsclass =& $ipsclass; require_once KERNEL_PATH . "class_converge.php"; $ipsclass->converge = new class_converge( $ipsclass->DB ); $ipsclass->init_load_cache( array('rss_export', 'bbcode', 'badwords', 'emoticons', 'settings', 'group_cache', 'systemvars', 'skin_id_cache', 'forum_cache', 'moderators', 'stats')); $ipsclass->member = $ipsclass->sess->authorise(); предлагаю внести в документацию по АПИ - все что необходимо инициализировать чтобы работало по указанному примеру. еще раз спасибо за уделенное время =) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.