Skocz do zawartości
"Idzie nowe..." - o zmianach i nie tylko ×
Przeniesienie zakupów z IPS Marketplace / Moving bought items from IPS Marketplace ×

Rekomendowane odpowiedzi

Opublikowano

Witam,

aktualnie próbuję wykorzystać informacje zawarte w tym artykule - > http://forum.invisionize.pl/topic/3895-posting-a-topic-or-reply/. Konkretnie chodzi mi o drugą część artykułu, w której jest opisane jak dodać temat spoza skryptu IPB.

Tutaj pytanie, czy komuś się udało wykorzystać zawarte tam informacje. Jeśli tak to poprosiłbym o załączenie odpowiedniego kodu tutaj.

Pozdrawiam

Łukasz

Pozdrawiam

Łukasz

Opublikowano (edytowane)

Próbuję na razie tak :

<?php
/**
* Library to facilitate posting to the IP.Board 3 forums
*
* @author              bfarber
* @version             1
* @since               3rd April, 2009
**/


/**
* Post
* Provides a wrapper class for posting new topics to the forums
*
* @author              bfarber
*/
class Post
{
       /**
        * Path to the forums
        *
        * @access      public
        * @var         string
        */
       public $forumPath       = "C:/wamp/www/frontforum/forum/";

       /**
        * Forum ID for new posts
        *
        * @access      public
        * @var         integer
        */
       public $forumId         = 2;

       /**
        * IPB Post Class
        *
        * @access      private
        * @var         object  Post Class
        */
       private $_postClass;

       /**
        * Post details
        *
        * @access      public
        * @var         array
        */
       public $postData        = array(
                                                               'member_id'             => 1,
                                                               );

       /**
        * Construct our object
        *
        * @access      public
        * @return      void
        */
       public function __construct( $forumPath='' )
       {
               /**
                * Set forum path
                */
               if( $forumPath )
               {
                       $this->forumPath        = $forumPath;
               }

               /**
                * IPB stuff
                */
               define( 'IPB_THIS_SCRIPT', 'public' );
               chdir( $this->forumPath );
               require_once( './initdata.php' );
       }

       /**
        * Associate the user
        *
        * @access      public
        * @param       array           User data
        * @return      void
        */
       public function associateUser( $user )
       {
               if( !$user['email'] )
               {
                       return false;
               }

               /**
                * IPB registry
                */
               $ipbRegistry    = ipsRegistry::instance();

               /**
                * Get and set user
                */
               $IPBUser = IPSMember::load( $user['email'] );

               if( $IPBUser['member_id'] )
               {
                       $this->post['member_id']        = $IPBUser['member_id'];
                       $this->post['member']           = $IPBUser;
               }
       }

       /**
        * Post the topic..
        *
        * @access      public
        * @param       array           User data
        * @return      bool
        */
       public function postTopic( $user = array() )
       {
               /**
                * IPB registry
                */
               require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );
	require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );
               $ipbRegistry    = ipsRegistry::instance();
               $ipbRegistry->init();
               /**
                * Associate user
                */
               $this->associateUser( $user );
               /**
                * IPB forums class
                */
               require_once( IPSLib::getAppDir( 'forums' ) . '/app_class_forums.php' );
               $appClass       = new app_class_forums( $ipbRegistry );

               /**
                * Get post class
                */
               require_once( IPSLib::getAppDir( 'forums' ) . '/sources/classes/post/classPost.php' );
               $this->_postClass = new classPost( $ipbRegistry );

               /**
                * Set some data
                */
               $this->_postClass->setIsPreview( false );
               $this->_postClass->setForumData( $ipbRegistry->getClass('class_forums')->forum_by_id[ 5 ] );
               $this->_postClass->setForumID( 5 );//rozumiem ze to id dzialu w ktorym temat dodaję
               $this->_postClass->setPostContent( 'cosik' );
               $this->_postClass->setAuthor( 1 );//to id member'a - na razie na sztywno wpisuję
               $this->_postClass->setPublished( true );
               $this->_postClass->setSettings( array( 'enableSignature' => 1,
                                                                                          'enableEmoticons' => 0,
                                                                                          'post_htmlstatus' => 0,
                                                                                          'enableTracker'   => 0 ) );
               $this->_postClass->setTopicTitle( "lolek" );

               /**
                * And post it...
                */
               try
               {
                       if ( $this->_postClass->addTopic() === FALSE )
                       {
                                print_r("nie dodalem");return false;
                       }
               }
               catch( Exception $error )
               {
                       return false;
               }

               $this->topic = $this->_postClass->getTopicData();
               $this->post  = $this->_postClass->getPostData();

               return true;
       }
}

$post = new Post;
$user = array("email"=>"mojemailzforum");
$post->postTopic($user);

?>

Czy coś źle robię ? Nie działa więc na pewno coś nie tak robię ;/

Analogicznie chciałbym również dodać odpowiedź do już istniejącego tematu, ale tego jeszcze nie próbowałem zrobić.

Eh strasznie mi głupio teraz - $this->_postClass->setAuthor( 1 );//to id member'a - na razie na sztywno wpisuję - tutaj miałem na początku 2 - a takiego user'a na localnym forum nie mam i dlatego mi nie dodawało :) - czyli pól problemy rozwiązane(tematy już dodaje), teraz interesuje mnie jak dodać odpwiedź do już dodanego tematu. Ogólnie DawPi - szybko odpowiedziałeś.

Edytowane przez LukiQ

Pozdrawiam

Łukasz

Opublikowano (edytowane)

A jakie parametry podać, żeby odpowiedzieć na konkretny temat -> bo ja widzę,że w class'ie classPost funcja addReply nie ma żadnych parametrów.

rozumiem ze zamieniam tutaj :

try {
			if ( $this->_postClass->addTopic() === FALSE )
			{
					print "Nie udalo sie dodać posta.";
			}

na

try {
			if ( $this->_postClass->addReply () === FALSE )
			{
					print "Nie udalo sie dodać posta.";
			}

a wcześniej ustawiam

$this->_postClass->setTopicID( 2 )

, gdzie numer to oczywiscie id tematu ?

Edytowane przez LukiQ

Pozdrawiam

Łukasz

Opublikowano

 $post->addReply();

? :)

Ok, zrobiłem tak, ale niestety nie dodaje odpowiedzi, z bazy wziąłem na pewno dobre id tematu. Kod pod spodem.

<?php
/**
* Library to facilitate posting to the IP.Board 3 forums
*
* @author              bfarber
* @version             1
* @since               3rd April, 2009
**/


/**
* Post
* Provides a wrapper class for posting new topics to the forums
*
* @author              bfarber
*/
class Post
{
       /**
        * Path to the forums
        *
        * @access      public
        * @var         string
        */
       public $forumPath       = "C:/wamp/www/frontforum/forum/";

       /**
        * Forum ID for new posts
        *
        * @access      public
        * @var         integer
        */
       public $forumId         = 2;

       /**
        * IPB Post Class
        *
        * @access      private
        * @var         object  Post Class
        */
       private $_postClass;

       /**
        * Post details
        *
        * @access      public
        * @var         array
        */
       public $postData        = array(
                                                               'member_id'             => 1,
                                                               );

       /**
        * Construct our object
        *
        * @access      public
        * @return      void
        */
       public function __construct( $forumPath='' )
       {
               /**
                * Set forum path
                */
               if( $forumPath )
               {
                       $this->forumPath        = $forumPath;
               }

               /**
                * IPB stuff
                */
               define( 'IPB_THIS_SCRIPT', 'public' );
               chdir( $this->forumPath );
               require_once( './initdata.php' );
       }

       /**
        * Associate the user
        *
        * @access      public
        * @param       array           User data
        * @return      void
        */
       public function associateUser( $user )
       {
               if( !$user['email'] )
               {
                       return false;
               }

               /**
                * IPB registry
                */
               $ipbRegistry    = ipsRegistry::instance();

               /**
                * Get and set user
                */
               $IPBUser = IPSMember::load( $user['email'] );

               if( $IPBUser['member_id'] )
               {
                       $this->post['member_id']        = $IPBUser['member_id'];
                       $this->post['member']           = $IPBUser;
               }
       }

       /**
        * Post the topic..
        *
        * @access      public
        * @param       array           User data
        * @return      bool
        */
       public function postTopic( $user = array() )
       {
               /**
                * IPB registry
                */
               require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );
	require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );
               $ipbRegistry    = ipsRegistry::instance();
               $ipbRegistry->init();
               /**
                * Associate user
                */
               $this->associateUser( $user );
               /**
                * IPB forums class
                */
               require_once( IPSLib::getAppDir( 'forums' ) . '/app_class_forums.php' );
               $appClass       = new app_class_forums( $ipbRegistry );

               /**
                * Get post class
                */
               require_once( IPSLib::getAppDir( 'forums' ) . '/sources/classes/post/classPost.php' );
               $this->_postClass = new classPost( $ipbRegistry );

               /**
                * Set some data
                */
               $this->_postClass->setIsPreview( false );
               $this->_postClass->setForumData( $ipbRegistry->getClass('class_forums')->forum_by_id[ 5 ] );
               $this->_postClass->setForumID( 5 );//rozumiem ze to id dzialu w ktorym temat dodaję
               $this->_postClass->setPostContent( 'cosik' );
               $this->_postClass->setAuthor( 1 );//to id member'a - na razie na sztywno wpisuję
               $this->_postClass->setPublished( true );
               $this->_postClass->setSettings( array( 'enableSignature' => 1,
                                                                                          'enableEmoticons' => 0,
                                                                                          'post_htmlstatus' => 0,
                                                                                          'enableTracker'   => 0 ) );
               $this->_postClass->setTopicTitle( "lolek" );

               /**
                * And post it...
                */
               try
               {
                       if ( $this->_postClass->addTopic() === FALSE )
                       {
                                print_r("nie dodalem");return false;
                       }
               }
               catch( Exception $error )
               {
                       return false;
               }

               $this->topic = $this->_postClass->getTopicData();
               $this->post  = $this->_postClass->getPostData();

               return true;
       }


public function addTopicReply( $user = array() )
       {
               /**
                * IPB registry
                */
               require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' );
	require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' );
               $ipbRegistry    = ipsRegistry::instance();
               $ipbRegistry->init();
               /**
                * Associate user
                */
               //$this->associateUser( $user );
               /**
                * IPB forums class
                */
               require_once( IPSLib::getAppDir( 'forums' ) . '/app_class_forums.php' );
               $appClass       = new app_class_forums( $ipbRegistry );

               /**
                * Get post class
                */
               require_once( IPSLib::getAppDir( 'forums' ) . '/sources/classes/post/classPost.php' );
               $this->_postClass = new classPost( $ipbRegistry );

               /**
                * Set some data
                */
               $this->_postClass->setIsPreview( false );
               $this->_postClass->setForumData( $ipbRegistry->getClass('class_forums')->forum_by_id[ 5 ] );
               $this->_postClass->setForumID( 5 );//rozumiem ze to id dzialu w ktorym temat dodaję
               $this->_postClass->setPostContent( 'cosik' );
               $this->_postClass->setAuthor( 1 );//to id member'a - na razie na sztywno wpisuję
               $this->_postClass->setPublished( true );
               $this->_postClass->setSettings( array( 'enableSignature' => 1,
                                                                                          'enableEmoticons' => 0,
                                                                                          'post_htmlstatus' => 0,
                                                                                          'enableTracker'   => 0 ) );
               $this->_postClass->setTopicID(2); //tutaj też na sztywno daje id tematu

               /**
                * And post it...
                */
               try
               {
                       if ( $this->_postClass->addReply() === FALSE )
                       {
                                print_r("nie dodalem");return false;
                       }
               }
               catch( Exception $error )
               {
                       return false;
               }

               $this->topic = $this->_postClass->getTopicData();
               $this->post  = $this->_postClass->getPostData();

               return true;
       }
}

$post = new Post;
$user = array("email"=>"[email protected]");
$post->addTopicReply($user);

?>

Z góry bardzo dziękuję za pomoc.

Pozdrawiam

Łukasz

Pozdrawiam

Łukasz

  • Manager
Opublikowano

Wg mnie to powinieneś spróbować nie ustawiać nic na sztywno, a skorzystać z metody

$topic = $post->getTopicData();

By pobrać ID tematu i dopiero taki ustawić przy próbie dodania odpowiedzi.

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Opublikowano (edytowane)

Wg mnie to powinieneś spróbować nie ustawiać nic na sztywno, a skorzystać z metody

$topic = $post->getTopicData();

By pobrać ID tematu i dopiero taki ustawić przy próbie dodania odpowiedzi.

Korzystając z metody setTopicID ustawiam parametr, który jest właśnie przypisywany do odpowiedniej zmiennej przez metodę getTopicData() już w samym forum. Przynajmniej tak mi się wydawało, oczywiście spróbowałem zrobić tak jak prosiłeś i nic to nie dało ;/.

Edytowane przez LukiQ

Pozdrawiam

Łukasz

Opublikowano

DawPi, i jak, może pomożesz przy tym ?

najpierw ustawiam parametry :

$this->_postClass->setIsPreview( false );
    $this->_postClass->setForumData( ipsRegistry::getClass('class_forums')->forum_by_id[ $idForum ] );
    $this->_postClass->setForumID( $idForum );//this is id for the forum where the topic is
    $this->_postClass->setPostContent( $postContent );
    $this->_postClass->setAuthor( $idUser );//this is id for member
    $this->_postClass->setPublished( true );
    $this->_postClass->setSettings( array( 'enableSignature' => 1,
									       'enableEmoticons' => 1,
									       'post_htmlstatus' => 0,
									       'enableTracker'   => 0 ) );
    $this->_postClass->setTopicID( $topicId );

później próbuje wysłać odpowiedź :

try
    {
	    if ( $this->_postClass->addReply() === FALSE )
	    {
		    return "Reply posting failed";

	    }
    }
    catch( Exception $error )
    {
	    print "Reply posting failed: " . $error->getMessage();
	    exit;
    }

Prześledziłem co się dzieje w pliku forum\admin\applications\forums\sources\classes\post\classPost.php jeśli odpowiadam prosto z forum oraz co się dzieje gdy próbuję wysłać odpowiedź poprzez zewnętrzną aplikację. W forum magiczna metoda getForumData zwraca wiersz z bazy z tablicy topics, wiersz z id tematu na który chcemy odpowiadać, natomiast gdy korzystam z zewnętrznego mechanizmu (który w końcu też korzysta z klasy classPost) metoda getForumData zwraca pustą tablicę. Dlatego ponawiam pytanie - zapomniałem o ustawieniu jakiegoś parametru?

Bardzo dziękuję z góry za odpowiedź, jakąkolwiek, która może naprowadzić mnie na rozwiązanie tego problemu.

Pozdrawiam

Łukasz

Opublikowano

Zrobiłem mały myk - niestety wymagał on edycji pliku w forum : forum\admin\applications\forums\sources\classes\post\classPost.php.

Do klasy classPost dodałem zmienną publiczną $externalData :) , ustawiłem jej wartość na false, w funkcji replySetUp(), w miejscu gdzie zwraca tablicę z wierszem z bazy - zawierającym wszystkie informacje z bazy, dorzuciłem takie sprawdzenie :

if($this->externalData) {
  $topic=$this->externalData;
} else {
  $topic = $this->getTopicData();
}

.

W klasie od zewnętrznego api - addTopicReply, dodaję jeden parametr : $topicData - tutaj znajduje się cały wiersz z bazy na temat danego topicu, lub false gdy go nie ma - przypisuję go $this->_postClass->externalData=$topicData, i po taki małym zabiegu już mogę odpowiadać na tematy już istniejące przez aplikację zewnętrzną.

Wiem, wiem. Edytowałem pliki forum - to rozwiązanie tymczasowe, póki nie zrobię tego poprawnie, lub ktoś mnie nie naprowadzi na inne rozwiązanie.

Mam nadzieję, że się to komuś przyda. :)

Pozdrawiam

Łukasz

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.