mac2000 Опубликовано 15 Января 2009 Жалоба Поделиться Опубликовано 15 Января 2009 ЗадачаНа сайте при редактировании новостей вызывается функция,которая в зависимости от того создается новость или редактируетсядолжна создавать или редактировать пост на форуме. С созданием поста разобрался благодаря api_topics_and_posts $ipb=$_SERVER['DOCUMENT_ROOT']."/forum/"; require_once $ipb."sources/api/api_topics_and_posts.php"; $api = new api_topics_and_posts(); $api->path_to_ipb = $ipb; $api->api_init(); $api->set_author_by_id(1); $api->set_post_content("post content goes here"); $api->set_forum_id("5"); $api->set_topic_title("title"); $api->set_topic_description("des"); $api->set_topic_state('open'); $api->create_new_topic(); А вот как быть с обновлением? Вся беда в том что новость после создания проходит "модеряцию" еще одним двумя людьми которые подправляют ее. Как правило первый просто вбивает содержимое, второй все оформляет по людски. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 15 Января 2009 Жалоба Поделиться Опубликовано 15 Января 2009 Вопрос не понятен. Что конкретно нужно?Чтобы на главной странице появился? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
mac2000 Опубликовано 15 Января 2009 Автор Жалоба Поделиться Опубликовано 15 Января 2009 Вопрос не понятен. Что конкретно нужно?Чтобы на главной странице появился? Как обновить запись (изменить ее контент) на форуме зная ее id? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 15 Января 2009 Жалоба Поделиться Опубликовано 15 Января 2009 ну так смотрите тот же apiтам примеры есть можно также по форуму поискать Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
mac2000 Опубликовано 15 Января 2009 Автор Жалоба Поделиться Опубликовано 15 Января 2009 ну так смотрите тот же apiтам примеры есть можно также по форуму поискать собственно потому и спрашиваю что в примерах и коде не наблюдаю ничего о обновлении тем. по форуму искал - ничего толкового нет. Я так понимаю что в api этого и нет вовсе, тогда хочу поинтересоваться у людей которые имеют опыт работы с данным форумом: "будет ли корректным с моей стороны напрямую в базе обновить содержание поста в таблице ?" Дело в том что я не совсем хорошо понимаю как работает форум, нужно ли к примеру будет где то сбросить кеш или еще что-то в таком духе. Вот по такому запросу все вроде обновляется:UPDATE ibf_posts SET post = 'новый контент' WHERE pid = (SELECT topic_firstpost FROM ibf_topics WHERE tid=ID-топика) Зарание спасибо. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
mac2000 Опубликовано 15 Января 2009 Автор Жалоба Поделиться Опубликовано 15 Января 2009 Кстати наткнулся на весьма интересное дело, скрипт из которого я вызываю api для созданий топика - в кодировке UTF8 из-за чего в форум естественно попадают каракули (форум на 1251). Функции конвертирования строк из UTF8 в 1251 (в частности родная функция форума $api->ipsclass->txt_convert_charsets("привет","UTF8","WINDOWS-1252") ) эфекта не дают. Для того чтобы все было нормально необходимо перед вызовом метода create_new_topic() выполнить вот такую команду:$api->ipsclass->DB->query( "SET NAMES utf8" ); после чего на форум попадает нормальный русский текст, НО! объект то ipsclass в памяти один весит (эдакий singletone), и на форуме все кроме нашего поста превращается в "??????????????", вот такие вот дела, причем что интересно, вот такой подход: $api->ipsclass->DB->query( "SET NAMES utf8" );$api->create_new_topic();$api->ipsclass->DB->query( "SET NAMES cp1251" );проблемы не решает. и что еще веселее оно так держится достаточно долго, что очень стремно ... никто не сталкивался с таким делом? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 15 Января 2009 Жалоба Поделиться Опубликовано 15 Января 2009 А iconv() не пробовали использовать для конвертации? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
mac2000 Опубликовано 21 Января 2009 Автор Жалоба Поделиться Опубликовано 21 Января 2009 А iconv() не пробовали использовать для конвертации? а резон? iconv всеравно не поможет, всмысле он делает то же что и любая функция по конвертации которых в нете просто куча. что действительно помогает, так это SET NAMES но как его потом вернуть назад? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 21 Января 2009 Жалоба Поделиться Опубликовано 21 Января 2009 Никак не вернуть, делать эту работу за него. А лучше всего привести БД к единому формату и не заниматься такими извращениями Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
mac2000 Опубликовано 21 Января 2009 Автор Жалоба Поделиться Опубликовано 21 Января 2009 Никак не вернуть, делать эту работу за него. А лучше всего привести БД к единому формату и не заниматься такими извращениями с чем с чес а с этим я согласен на все 100, но к сожалению возможности такой нет, и вообще если не честно хочется даже подходить к форуму. придется реверсить пол api... как доковырюсь отпишусь, может еще кому понадобиться... напоследок еще один казус. я как любой порядочный леньтяй, решил - чего я буду лезть и ковыряться - тем более - вдруг чтото упущу...просто дописал в class_mysql_client перед вызовом mysql_query такой код: $zzz = fopen($_SERVER['DOCUMENT_ROOT']."/news2forum.txt","a"); fputs($zzz,"___".$the_query."___"); fclose($zzz); и что вы думаете - ничего не произошло, я то думал "ага, сейчас зайду на форум, создам новый топик, а потом просто из файла заберу нужные мне запросы" но там пусто.... О_о Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Arhar Опубликовано 22 Января 2009 Жалоба Поделиться Опубликовано 22 Января 2009 писать надо в (ROOT_PARH."cache/") или как-то так, посмотрите функцию fatal_error в ips_cernel/class_db.php и инициализацию подключения в sources/ipsclass.php Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
mac2000 Опубликовано 22 Января 2009 Автор Жалоба Поделиться Опубликовано 22 Января 2009 писать надо в (ROOT_PARH."cache/") или как-то так, посмотрите функцию fatal_error в ips_cernel/class_db.php и инициализацию подключения в sources/ipsclass.php спасибо за подсказку, нашел еще более правильное решение:в файле ipsclass.php необходимо заменить строку$this->DB->obj['use_debug_log'] = 0;на$this->DB->obj['use_debug_log'] = 1;после чего можно выполнять интересующие действия, в папке cache форума появится файл sql_debug_log_текущая_дата.cgi с логом выполнявшихся скриптов. вот кусок того что удалось осознать:/* ADD TOPIC */ INSERT INTO ibf_topics (title,description,state,posts,starter_id,starter_name,start_date,last_poster _id,last_poster_name,last_post,icon_id,author_mode,poll_state,last_vote,views,fo r um_id,approved,pinned,topic_open_time,topic_close_time) VALUES('title','des','open',0,1,'admin',1232649109,1,'admin',1232649109,0,1,0,0,0,5,1,0,0,0) /*LAST ISERTID = 326*/ /* postkey = md5( time() ) postdate = time() */ INSERT INTO ibf_posts (author_id,use_sig,use_emo,ip_address,post_date,icon_id,post,author_name,topi c_id,queued,post_htmlstate,post_key,new_topic) VALUES(1,1,1,'192.168.0.1',1232649109,0,'content','admin',326,0,0,'5e53cb610eeb5cfa15da8fddbaab4db4',1) /*LAST ISERTID = 4360*/ UPDATE ibf_topics SET topic_firstpost=4360 WHERE tid=326 UPDATE ibf_forums SET last_title='title',last_id=326,last_post=1232649109,last_poster_name='admin',last_poster_id=1,topics=2,newest_id=326,newest_title='title' WHERE id=5 UPDATE ibf_attachments SET attach_rel_id=4360,attach_rel_module='post' WHERE attach_post_key='5e53cb610eeb5cfa15da8fddbaab4db4' UPDATE ibf_members SET posts=posts+1, last_post=1232649109 WHERE id=1 INSERT INTO ibf_topic_views (views_tid) VALUES(326) /* EDIT TOPIC */ UPDATE ibf_posts SET author_id=1,use_sig=1,use_emo=1,ip_address='192.168.0.1',post_date=1232649109,icon_id=0,post='content2',author_name='admin',topic_id=326,queued=0,post_htmlstate=0,edit_time=1232649141,edit_name='admin',post_edit_reason='',append_edit=0 WHERE pid=4360 UPDATE ibf_attachments SET attach_rel_id=4360,attach_rel_module='post' WHERE attach_post_key='5e53cb610eeb5cfa15da8fddbaab4db4' UPDATE ibf_topics SET topic_hasattach=0 WHERE tid=326 INSERT INTO ibf_topic_views (views_tid) VALUES(317) Вся беда в том, что, к сожалению, нет возможности повторить с пол дюжины скриптов которые обновляют таблицы кэша форума, туда пихаются, как я понимаю, серриализованые объекты. Итак, на данный момент:известно как добавить/обновить топик на форуменеясно как обновить кеш форуманеясно как запустить уведомление подписаных на данный форум пользователей Заметка по обновлению форума:Даже если и выйдет как то обновлять кеш форума используя его api, то возникает вопрос, о том когда это делать, ведь если сразу за созданием, последует обновление - то дважды запущеный скрипт обновления кеша может наделать бед в базе форума, так как, насколько я понимаю, операция эта весьма долгая. Получается что есть риск положить форум, нагрузив его задачами по обновлению кеша. Хотелось бы услышать ваши соображения, возможно я не прав, и кеш обновиться самостоятельно, а рассылка сгенирируется и отправиться самостоятельно? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 22 Января 2009 Жалоба Поделиться Опубликовано 22 Января 2009 Если использовать API, то рассылка отправится сама, посмотрите на код функции внимательнее. //----------------------------------------- // Tracker? //----------------------------------------- $this->post->forum_tracker( $this->topic['forum_id'], $this->topic_id, $this->topic['title'], $this->forum['name'], $this->post_content ); И, кстати, про обновления сообщения: /*-------------------------------------------------------------------------*/ // Установка содержимого сообщения /*-------------------------------------------------------------------------*/ /** * Устанавливает содержимое сообщения для создаваемой темы/сообщения * * @param string содержимое сообщения * @return boolean инициализация $this->post_content */ function set_post_content( $post )Такое ощущение, что содержимое этого файла вы не пролистали даже... Обновление кеша также происходит автоматически, если при выполнении этих функций $this->delay_rebuild == 0. Я бы не назвал её такой уж ресурсоёмкой операцией. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
mac2000 Опубликовано 22 Января 2009 Автор Жалоба Поделиться Опубликовано 22 Января 2009 я бы с радостью использовал api и не морочил голову ни себе ни вам, но у меня все на utf8, форум на 1251, для того чтобы корректно создать топик используя api - необходимо выполнить запрос SET NAMES utf8 - после чего форум ломается - как это побороть - я не знаю, повторный вызов SET NAMES не помогает, форум превращается в кучу ??????????????? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 22 Января 2009 Жалоба Поделиться Опубликовано 22 Января 2009 Ещё один вариант решения проблемы: создавайте для вызовов API второе подключение к БД. я бы с радостью использовал api и не морочил голову ни себе ни вамНу так скопируйте тогда код оттуда, делов-то? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
mac2000 Опубликовано 22 Января 2009 Автор Жалоба Поделиться Опубликовано 22 Января 2009 Ещё один вариант решения проблемы: создавайте для вызовов API второе подключение к БД. я бы с радостью использовал api и не морочил голову ни себе ни вамНу так скопируйте тогда код оттуда, делов-то? спасибо за очень информативный совет Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Sannis Опубликовано 22 Января 2009 Жалоба Поделиться Опубликовано 22 Января 2009 Чтобы написать за вас весь код, мне нужно иметь на руках весь ваш код С созданием отдельного подключения должен справиться любой PHP программист, разобраться в коде API будет труднее, но тоже возможно. Тем более, что используя вариант с двумя подключениями вы избавите себя от этой "проблемы". Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
mac2000 Опубликовано 23 Января 2009 Автор Жалоба Поделиться Опубликовано 23 Января 2009 никто не сталкивался с такой проблемой:вставляю, используя api, топик, а в нем зараза куча rnrnrn появляется. перепробывал все что знаю - ничего не дает результата. подскажите плиз куда рыть... Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.