Мишка2 Опубликовано 23 Февраля 2006 Жалоба Поделиться Опубликовано 23 Февраля 2006 Версия 2.1.x Хочу научиться создавать тему на форуме, не заходя на сам форум. Путем правки базы. Написал скриптик <?php ////////подключаем конфиг //и базу require_once ("./conf_global.php"); $pref = $INFO['sql_tbl_prefix']; $db = mysql_pconnect($INFO['sql_host'], $INFO['sql_user'], $INFO['sql_pass']); mysql_select_db($INFO['sql_database']); ////////// //////параметры $date = date("U"); //$post = addslashes($_POST['text_topic']); //$title = addslashes($_POST['title_topic']); //$descr = addslashes($_POST['desc_topic']); $post = addslashes('POST text'); $title = addslashes('TOPIC TITLE'); $descr = addslashes('.......'); $autorid = 1; //id пользователя $autorname = "admin"; //имя пользователя от которого будет тема $forumid =4; // id форума в котором будет тема /////////////////// //начнем с поста $q = "INSERT INTO ".$pref."posts VALUES (NULL, 0, NULL, $autorid, '$autorname', '1', '1', '88.88.88.88', $date, 0, '$post', 0, '', '$title', 0, NULL, 0, 0, 0)"; $r = mysql_query($q); //вытягиваем id поста и записываем в топик $post_id = mysql_insert_id(); $q = "INSERT INTO ".$pref."topics VALUES (NULL, '$title', '$descr', 'open', 1, '$autorid', '$date', '$autorid', '$date', 1, '$autorname', '$autorname', 0, 0, 1, $forumid, 1, 1, 0, NULL, 0, 0, $post_id, '', '', '', '', '')"; $r = mysql_query($q); //теперь берем id топика и заносим в пост $topic_id = mysql_insert_id(); $q = "update ".$pref."posts set topic_id='$topic_id' where pid=".$post_id; $r = mysql_query($q); //ну а теперь обновим таблицу forums $q = "update ".$pref."forums set topics=topics+1, posts=posts+1, last_post='$date', last_poster_id='$autorid', last_poster_name='$autorname', last_title='$title', last_id='$topic_id' where id='$forumid'"; $r = mysql_query($q); //////////////////////////// ?>Вот такой вот скриптик. Кидаем его в каталог форума. Тема создается! И все бы хорошо, да вот... 1. bbcode отключен! Хотя все в таблице posts выставил правильно. Самое интересное, что я открываю пост для редактирования и сразу жму "Отредактировать сообщение" не внося каких либо изменений. bbcode после этого включается для поста!!! 2. не обновляется статистика форума! Вот этот кусок //ну а теперь обновим таблицу forums $q = "update ".$pref."forums set topics=topics+1, posts=posts+1, last_post='$date', last_poster_id='$autorid', last_poster_name='$autorname', last_title='$title', last_id='$topic_id' where id='$forumid'"; $r = mysql_query($q);обновляет в базе и общее количество постов и тем и тему в выбраном форуме. Но эти изменения не отображаются при просмотре списка форумов! Нечего не меняется пока не нажать на ссылку "Пересчетать все в форуме". Вот такие вот дела. Может я еще какую-то таблицу пропустил? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Мишка2 Опубликовано 24 Февраля 2006 Автор Жалоба Поделиться Опубликовано 24 Февраля 2006 может будет легче заюзать функцию, которая открывает темы? вот только я ее пока еще не нашел.. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Мишка2 Опубликовано 24 Февраля 2006 Автор Жалоба Поделиться Опубликовано 24 Февраля 2006 Так, с п.1 разобрался. Просто html слать нужно, но а что со вторым????? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 24 Февраля 2006 Жалоба Поделиться Опубликовано 24 Февраля 2006 там же целая премудрость с кешами.надо ещё кеш обновить. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Мишка2 Опубликовано 24 Февраля 2006 Автор Жалоба Поделиться Опубликовано 24 Февраля 2006 А можно маленькую подсказку на тему как?! Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Мишка2 Опубликовано 25 Февраля 2006 Автор Жалоба Поделиться Опубликовано 25 Февраля 2006 по идее ж можно вызвать функцию, которая кеш обновит! вот только что-то я ее пока не нашел.. продолжаю поиски Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Destruction Опубликовано 25 Февраля 2006 Жалоба Поделиться Опубликовано 25 Февраля 2006 Помницца мне надо было сделать постинг путём правки БД - если дёргать всё по-порядку, анализировать и нужное втыкать - то там тебе и парсинги, там тебе кэши, там всё, что надо, такая работа занимает не более получаса. Мод был приватным - не могу показать сорц, тем, более, что сорц дома, а я не совсем дома. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Мишка2 Опубликовано 25 Февраля 2006 Автор Жалоба Поделиться Опубликовано 25 Февраля 2006 Да весь мод мне не нужен. Но надеюсь сейчас дадите полезный совет! Функция которая обновляет кеш форума находится в /sources/lib/func_mod.phpФункция - forum_recount($fid) Теперь только осталось ее запустить Сам PHP я знаю вполне неплохо, но вот классы не юзал! Как правильно подключить класс из этого файла и вызвать функцию? Я пытался в лоб require_once ("./sources/lib/func_mod.php"); $cach = new func_mod(); $cach -> forum_recount($forumid); но у меня ясное дело нечего не вышло Fatal error: Call to a member function on a non-object in /home/script/1/sources/lib/func_mod.php on line 840 Прошу помочь! Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Destruction Опубликовано 25 Февраля 2006 Жалоба Поделиться Опубликовано 25 Февраля 2006 Ну дык что-то не то вызываете, посмотрите как инициализируется сия функция и какие классы ей сразу прописываются. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Мишка2 Опубликовано 25 Февраля 2006 Автор Жалоба Поделиться Опубликовано 25 Февраля 2006 Вот функция //----------------------------------------- // @forum_recount: Recount topic & posts in a forum // ----------- // Accepts: forum_id // Returns: NOTHING (TRUE/FALSE) //----------------------------------------- function forum_recount($fid="") { $fid = intval($fid); if ( ! $fid ) { if ( $this->forum['id'] ) { $fid = $this->forum['id']; } else { return FALSE; } } //----------------------------------------- // Get the topics.. //----------------------------------------- $topics = $this->ipsclass->DB->simple_exec_query( array( 'select' => 'COUNT(*) as count', 'from' => 'topics', 'where' => "approved=1 and forum_id=$fid" ) ); //----------------------------------------- // Get the QUEUED topics.. //----------------------------------------- $queued_topics = $this->ipsclass->DB->simple_exec_query( array( 'select' => 'COUNT(*) as count', 'from' => 'topics', 'where' => "approved=0 and forum_id=$fid" ) ); //----------------------------------------- // Get the posts.. //----------------------------------------- $posts = $this->ipsclass->DB->simple_exec_query( array( 'select' => 'SUM(posts) as replies', 'from' => 'topics', 'where' => "approved=1 and forum_id=$fid" ) ); //----------------------------------------- // Get the QUEUED posts.. //----------------------------------------- $queued_posts = $this->ipsclass->DB->simple_exec_query( array( 'select' => 'SUM(topic_queuedposts) as replies', 'from' => 'topics', 'where' => "forum_id=$fid" ) ); //----------------------------------------- // Get the forum last poster.. //----------------------------------------- $this->ipsclass->DB->simple_construct( array( 'select' => 'tid, title, last_poster_id, last_poster_name, last_post', 'from' => 'topics', 'where' => "approved=1 and forum_id=$fid", 'order' => 'last_post DESC', 'limit' => array( 0,1 ) ) ); $this->ipsclass->DB->simple_exec(); $last_post = $this->ipsclass->DB->fetch_row(); //----------------------------------------- // Reset this forums stats //----------------------------------------- $dbs = array( 'last_poster_id' => $last_post['last_poster_id'], 'last_poster_name' => $last_post['last_poster_name'], 'last_post' => $last_post['last_post'], 'last_title' => $last_post['title'], 'last_id' => $last_post['tid'], 'topics' => intval($topics['count']), 'posts' => intval($posts['replies']), 'queued_topics' => intval($queued_topics['count']), 'queued_posts' => intval($queued_posts['replies']), ); if ( $this->ipsclass->forums->forum_by_id[ $fid ]['_update_deletion'] ) { $dbs['forum_last_deletion'] = time(); } $this->ipsclass->DB->do_update( 'forums', $dbs, "id=".$fid ); //----------------------------------------- // Update forum cache //----------------------------------------- foreach( $dbs as $k => $v ) { $this->ipsclass->cache['forum_cache'][ $fid ][ $k ] = $v; } $this->ipsclass->update_cache( array( 'name' => 'forum_cache', 'array' => 1, 'deletefirst' => 0 ) ); return TRUE; } Функция пренадлежит вот такому классу class func_mod { //----------------------------------------- // @modfunctions: constructor // ----------- // Accepts: NOTHING // Returns: NOTHING (TRUE) //----------------------------------------- var $topic = ""; var $forum = ""; var $error = ""; var $auto_update = FALSE; var $stm = ""; var $upload_dir = ""; var $moderator = ""; function func_mod() { $this->error = ""; $this->upload_dir = $this->ipsclass->vars['upload_dir']; return TRUE; } А какой последовательности и вообще КАК правильно подключить все нужные классы? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Destruction Опубликовано 25 Февраля 2006 Жалоба Поделиться Опубликовано 25 Февраля 2006 $this->ipsclass Ну-ну, ipsclass следует назначить. Врубай поиск по сорцам, ищи:new func_modНайдёшь - смотри какие классы для него назначаются, смотри инициализацию "суперглобального класса" - ipsclass. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Мишка2 Опубликовано 25 Февраля 2006 Автор Жалоба Поделиться Опубликовано 25 Февраля 2006 Вот все мучаюсь. Чего только не подключал. В конце получилось вот такdefine( 'IPB_THIS_SCRIPT', 'public' ); define( 'IPB_LOAD_SQL' , 'queries' ); require_once( './init.php' ); $INFO = array(); 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 ROOT_PATH . "conf_global.php"; require_once( ROOT_PATH.'sources/lib/func_mod.php'); require_once( ROOT_PATH.'sources/api/api_topics_and_posts.php'); # Initiate super-class $ipsclass = new ipsclass(); $ipsclass->vars = $INFO; $ipsclass->init_db_connection(); $ipsclass->cach = new func_mod(); $ipsclass->cach->ipsclass =& $ipsclass; $ipsclass->cach -> forum_recount($forumid); // вот это вызов нужной функции теперь ошибок не пишет.. вообще нечего не пишет. И нечего не делает ПРОШУ помогите, у меня уже нет вариантов Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Мишка2 Опубликовано 27 Февраля 2006 Автор Жалоба Поделиться Опубликовано 27 Февраля 2006 Ну чего? Пишем моды, а как обновить кеш не знаем? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 27 Февраля 2006 Жалоба Поделиться Опубликовано 27 Февраля 2006 кто то не очень хорошо понимает что он делает. Мишка2, единственная умная мысль найденная у Вас в коде: require_once( ROOT_PATH.'sources/api/api_topics_and_posts.php'); Откройте этот файл и почитайте комментарии вверху как пользоваться. Многое прояснит... Если ни все. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Мишка2 Опубликовано 27 Февраля 2006 Автор Жалоба Поделиться Опубликовано 27 Февраля 2006 кто то не очень хорошо понимает что он делает.правда! Я ж с самого начала говорил, что плаваю в классах (но всетаки немного понимаю). Значит так, в api_topics_and_posts.php и правда есть комментарии ) Вот что там написано /** * API: Topics & Posts * * IMPORTANT: This API DOESN'T check permissions, etc * So, it's entirely possible to add replies to closed topics * and to post new topics where the user doesn't normally have * permission. * EXAMPLE USAGE * <code> * $api = new api_topics_and_posts(); * // ADD POST REPLY * $api->set_author_by_name('matt'); * $api->set_post_content("<b>Hello World!</b> :D"); * $api->set_topic_id( 100 ); * # 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(); * // ADD NEW TOPIC * $api->set_author_by_name('matt'); * $api->set_post_content("<b>Hello World!</b> :D"); * $api->set_forum_id( 10 ); * $api->set_topic_title('Hello World'); * $api->set_topic_description('I am the description'); * $api->set_topic_state('open'); * $api->create_new_topic(); * </code> * * @package InvisionPowerBoard * @subpackage APIs * @author Matt Mecham * @copyright Invision Power Services, Inc. * @version 2.1 */ По идее все просто. Поставил значит свои параметры. получилось: <?php define( 'IPB_THIS_SCRIPT', 'public' ); define( 'IPB_LOAD_SQL' , 'queries' ); require "conf_global.php"; require_once( './init.php' ); $INFO = array(); require_once "sources/ipsclass.php"; require_once( 'sources/api/api_topics_and_posts.php'); $api = new api_topics_and_posts(); // ADD POST REPLY $api->set_author_by_name('matt'); $api->set_post_content("<b>Hello World!</b> :D"); $api->set_topic_id( 137 ); # 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(); // ADD NEW TOPIC $api->set_author_by_name('matt'); $api->set_post_content("<b>Hello World!</b> :D"); $api->set_forum_id( 4 ); $api->set_topic_title('Hello World'); $api->set_topic_description('I am the description'); $api->set_topic_state('open'); $api->create_new_topic(); ?> Но опять ошибка Fatal error: Call to a member function on a non-object in /home/script/1/sources/api/api_topics_and_posts.php on line 521 Ошибка вот в этой стороке $this->author = $this->ipsclass->DB->build_and_exec_query( array( 'select' => '*', 'from' => 'members', 'where' => "LOWER(name) = '".$this->ipsclass->DB->add_slashes(strtolower($user_name))."'", 'limit' => array( 0, 1 ) ) ); Как я понял, я опять не подключил какой-то класс Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
GiV Опубликовано 27 Февраля 2006 Жалоба Поделиться Опубликовано 27 Февраля 2006 require_once( 'sources/api/api_topics_and_posts.php'); $api = new api_topics_and_posts(); $api->api_init(); // ADD POST REPLY {...} // ADD NEW TOPIC {...} Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
ro_lexx Опубликовано 6 Апреля 2006 Жалоба Поделиться Опубликовано 6 Апреля 2006 Привожу тебе пример своего скрипта add_topic.php, просто помести его в корень форума, всё отлично работает! <?php require_once "sources/api/api_topics_and_posts.php"; $api = new api_topics_and_posts(); $api->ipsclass =& $this->ipsclass; $api->api_init(); // ADD POST REPLY $api->set_author_by_name('matt'); $api->set_post_content("<b>Hello World!</b> :D"); $api->set_topic_id( 137 ); # 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(); // ADD NEW TOPIC $api->set_author_by_name('matt'); $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(); ?> Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.