Перейти к контенту

обновить пост


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

Задача

На сайте при редактировании новостей вызывается функция,

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

должна создавать или редактировать пост на форуме.

 

С созданием поста разобрался благодаря 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();

 

А вот как быть с обновлением?

 

Вся беда в том что новость после создания проходит "модеряцию" еще одним двумя людьми которые подправляют ее. Как правило первый просто вбивает содержимое, второй все оформляет по людски.

Ссылка на комментарий
Поделиться на других сайтах

Вопрос не понятен. Что конкретно нужно?

Чтобы на главной странице появился?

Ссылка на комментарий
Поделиться на других сайтах

Вопрос не понятен. Что конкретно нужно?

Чтобы на главной странице появился?

 

Как обновить запись (изменить ее контент) на форуме зная ее id?

Ссылка на комментарий
Поделиться на других сайтах

ну так смотрите тот же api

там примеры есть

 

можно также по форуму поискать

Ссылка на комментарий
Поделиться на других сайтах

ну так смотрите тот же api

там примеры есть

 

можно также по форуму поискать

 

собственно потому и спрашиваю что в примерах и коде не наблюдаю ничего о обновлении тем.

 

по форуму искал - ничего толкового нет.

 

Я так понимаю что в api этого и нет вовсе, тогда хочу поинтересоваться у людей которые имеют опыт работы с данным форумом: "будет ли корректным с моей стороны напрямую в базе обновить содержание поста в таблице ?"

 

Дело в том что я не совсем хорошо понимаю как работает форум, нужно ли к примеру будет где то сбросить кеш или еще что-то в таком духе.

 

Вот по такому запросу все вроде обновляется:

UPDATE ibf_posts SET post = 'новый контент' WHERE pid = (SELECT topic_firstpost FROM ibf_topics WHERE tid=ID-топика)

 

Зарание спасибо.

Ссылка на комментарий
Поделиться на других сайтах

Кстати наткнулся на весьма интересное дело, скрипт из которого я вызываю api для созданий топика - в кодировке UTF8 из-за чего в форум естественно попадают каракули (форум на 1251).

 

Функции конвертирования строк из UTF8 в 1251 (в частности родная функция форума $api->ipsclass->txt_convert_charsets("привет","UTF8","WINDOWS-1252") ) эфекта не дают.

 

Для того чтобы все было нормально необходимо перед вызовом метода create_new_topic() выполнить вот такую команду:

$api->ipsclass->DB->query( "SET NAMES utf8" );

 

после чего на форум попадает нормальный русский текст, НО! :D объект то ipsclass в памяти один весит (эдакий singletone), и на форуме все кроме нашего поста превращается в "??????????????", вот такие вот дела, причем что интересно, вот такой подход:

 

$api->ipsclass->DB->query( "SET NAMES utf8" );

$api->create_new_topic();

$api->ipsclass->DB->query( "SET NAMES cp1251" );

проблемы не решает.

 

и что еще веселее оно так держится достаточно долго, что очень стремно ...

 

никто не сталкивался с таким делом?

Ссылка на комментарий
Поделиться на других сайтах

А iconv() не пробовали использовать для конвертации?
Ссылка на комментарий
Поделиться на других сайтах

А iconv() не пробовали использовать для конвертации?

 

а резон? iconv всеравно не поможет, всмысле он делает то же что и любая функция по конвертации которых в нете просто куча.

 

что действительно помогает, так это SET NAMES но как его потом вернуть назад?

Ссылка на комментарий
Поделиться на других сайтах

Никак не вернуть, делать эту работу за него. А лучше всего привести БД к единому формату и не заниматься такими извращениями :D
Ссылка на комментарий
Поделиться на других сайтах

Никак не вернуть, делать эту работу за него. А лучше всего привести БД к единому формату и не заниматься такими извращениями :D

 

с чем с чес а с этим я согласен на все 100, но к сожалению возможности такой нет, и вообще если не честно хочется даже подходить к форуму.

 

придется реверсить пол api... как доковырюсь отпишусь, может еще кому понадобиться...

 

напоследок еще один казус.

 

я как любой порядочный леньтяй, решил - чего я буду лезть и ковыряться - тем более - вдруг чтото упущу...

просто дописал в class_mysql_client перед вызовом mysql_query такой код:

 

$zzz = fopen($_SERVER['DOCUMENT_ROOT']."/news2forum.txt","a");
fputs($zzz,"___".$the_query."___");
fclose($zzz);

 

и что вы думаете - ничего не произошло, я то думал "ага, сейчас зайду на форум, создам новый топик, а потом просто из файла заберу нужные мне запросы" но там пусто.... О_о

Ссылка на комментарий
Поделиться на других сайтах

писать надо в (ROOT_PARH."cache/") или как-то так, посмотрите функцию fatal_error в ips_cernel/class_db.php и инициализацию подключения в sources/ipsclass.php
Ссылка на комментарий
Поделиться на других сайтах

писать надо в (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, то возникает вопрос, о том когда это делать, ведь если сразу за созданием, последует обновление - то дважды запущеный скрипт обновления кеша может наделать бед в базе форума, так как, насколько я понимаю, операция эта весьма долгая. Получается что есть риск положить форум, нагрузив его задачами по обновлению кеша.

 

Хотелось бы услышать ваши соображения, возможно я не прав, и кеш обновиться самостоятельно, а рассылка сгенирируется и отправиться самостоятельно?

Ссылка на комментарий
Поделиться на других сайтах

Если использовать 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. Я бы не назвал её такой уж ресурсоёмкой операцией.

Ссылка на комментарий
Поделиться на других сайтах

я бы с радостью использовал api и не морочил голову ни себе ни вам, но у меня все на utf8, форум на 1251, для того чтобы корректно создать топик используя api - необходимо выполнить запрос SET NAMES utf8 - после чего форум ломается - как это побороть - я не знаю, повторный вызов SET NAMES не помогает, форум превращается в кучу ???????????????
Ссылка на комментарий
Поделиться на других сайтах

Ещё один вариант решения проблемы: создавайте для вызовов API второе подключение к БД.

 

я бы с радостью использовал api и не морочил голову ни себе ни вам

Ну так скопируйте тогда код оттуда, делов-то? :D

Ссылка на комментарий
Поделиться на других сайтах

Ещё один вариант решения проблемы: создавайте для вызовов API второе подключение к БД.

 

я бы с радостью использовал api и не морочил голову ни себе ни вам

Ну так скопируйте тогда код оттуда, делов-то? :D

 

спасибо за очень информативный совет ;)

Ссылка на комментарий
Поделиться на других сайтах

Чтобы написать за вас весь код, мне нужно иметь на руках весь ваш код :D

 

С созданием отдельного подключения должен справиться любой PHP программист, разобраться в коде API будет труднее, но тоже возможно. Тем более, что используя вариант с двумя подключениями вы избавите себя от этой "проблемы".

Ссылка на комментарий
Поделиться на других сайтах

никто не сталкивался с такой проблемой:

вставляю, используя api, топик, а в нем зараза куча rnrnrn появляется.

 

перепробывал все что знаю - ничего не дает результата.

 

подскажите плиз куда рыть...

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.