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

Cześć. Mam pytanie. Otóż planuję zrobić integrację forum z inną bazą danych. O co mi dokładniej chodzi? Chodzi mi o to że po stworzeniu konta wykonuje się dane zapytanie do innej bazy danych. Teraz mam pytanie w jakim pliku mogę znaleźć funkcję, która wykonuje się po utworzeniu konta przez użytkownika. Potrzebuję jeszcze funkcję, która tworzy konto użytkownikowi. W IPS 3 była bodajże taka funkcja:

IPSMember::create

 

Z góry dziękuję za odpowiedź.

  • Manager
Opublikowano

Lepiej zrobić aplikację i skorzystać z MemberSync: https://invisioncommunity.com/developers/docs/development/extensions/coremembersync-r147/

 When creating a MemberSync extension you need only use the methods that are relevant for your application. Any methods that are not relevant can be deleted. The possible methods are outlined below:

    /**
     * Member account has been created
     *
     * @param    $member    \IPS\Member    New member account
     * @return    void
     */
    public function onCreateAccount( $member )
    {
    
    }
    

 

intermedia - profesjonalne rozwiązania Invision Power Board

---

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

Opublikowano
7 godzin temu, DawPi napisał:

Lepiej zrobić aplikację i skorzystać z MemberSync: https://invisioncommunity.com/developers/docs/development/extensions/coremembersync-r147/


 When creating a MemberSync extension you need only use the methods that are relevant for your application. Any methods that are not relevant can be deleted. The possible methods are outlined below:

    /**
     * Member account has been created
     *
     * @param    $member    \IPS\Member    New member account
     * @return    void
     */
    public function onCreateAccount( $member )
    {
    
    }
    

 

 

Dziękuję za odpowiedź. Masz może poradnik w którym jest wytłumaczone jak tworzyć aplikację pod ten silnik?

Opublikowano (edytowane)

@DawPi Napisałem coś takiego. Mógłbyś wskazać co jest nie tak? To jest mój pierwszy plugin i nie wiem gdzie popełniłem błąd.

<?xml version="1.0" encoding="UTF-8"?>

<plugin name="Creating an account in the game" version_long="10000" version_human="1.0.0" author=".WhiteBlue" website="https://og-rpg.eu/" update_check=""><hooks><hook type="C" class="\IPS\Member" filename="createAccountInGame"><![CDATA[//<?php

 

/* To prevent PHP errors (extending class does not exist) revealing path */

if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )

{

  exit;

}

 

class hook20 extends _HOOK_CLASS_

{

 

public function onCreateAccount( $member )

{

  try

  {

   die('sss');

  }

  catch ( \RuntimeException $e )

  {

    if ( method_exists( get_parent_class(), __FUNCTION__ ) )

    {

      return \call_user_func_array( 'parent::' . __FUNCTION__, \func_get_args() );

    }

    else

    {

      throw $e;

    }

  }

}

 

}

]]></hook></hooks><tasks/><widgets/><htmlFiles/><cssFiles/><jsFiles/><resourcesFiles/><lang/><versions/></plugin>
Edytowane przez maxerxxl
Opublikowano (edytowane)

@DawPi Błąd:

Fatal error: Uncaught Error: Call to undefined method IPS\Member::loggedIn() in .../forum/system/Log/Log.php:107 Stack trace: #0 .../forum/init.php(659): IPS\_Log::log('Error: Class 'I...', 'uncaught_except...') #1 [internal function]: IPS\IPS::exceptionHandler(Object(Error)) #2 {main} thrown in .../forum/system/Log/Log.php on line 107

 

Kod:

//<?php

namespace IPS;

/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
    exit;
}

class hook22 extends \IPS\Patterns\ActiveRecord
{
    private $connection;

    public function __construct()
    {
        $this->connection = new PDO('mysql:host=xxx;dbname=xxx;charset=utf8', 'xxx', 'xxx');
    }

    /**
    * Member account has been created
    *
    * @param $member \IPS\Member New member account
    * @return void
    */
    public function onCreateAccount($member)
    {
        $query = $this->connection->prepare('INSERT INTO innaBaza SET id = ?, username = ?, email = ?, password = ?, ip = ?, added = DATE_FORMAT(FROM_UNIXTIME(?), "%Y-%m-%d %H:%i:%s")');

        $query->execute(array(
            $member->member_id,
            $member->name,
            $member->email,
            $member->members_pass_hash,
            $member->ip_address,
            $member->joined
        ));
    }
}
Edytowane przez maxerxxl
Opublikowano

Przy developer mode błąd:

Call to undefined method IPS\Member::loggedIn()

 

Kod:

//<?php

/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
    exit;
}

namespace IPS;

class hook22 extends \IPS\Patterns\ActiveRecord
{
    private $connection;

    public function __construct()
    {
        $this->connection = new PDO('mysql:host=xxx;dbname=xxxx;charset=utf8', 'xxxx', 'xxxx');
    }

    /**
    * Member account has been created
    *
    * @param $member \IPS\Member New member account
    * @return void
    */

    public function onCreateAccount($member)
    {
        $query = $this->connection->prepare('INSERT INTO og_users SET id = ?, username = ?, email = ?, password = ?, ip = ?, added = DATE_FORMAT(FROM_UNIXTIME(?), "%Y-%m-%d %H:%i:%s")');

        $query->execute(array(
            $member->member_id,
            $member->name,
            $member->email,
            $member->members_pass_hash,
            $member->ip_address,
            $member->joined
        ));
    }
}

 

Opublikowano
W dniu 27.04.2019 o 14:19, DawPi napisał:

Otwórz logi w ACP i wklej pełną treść tego błędu.

 

Bardzo dziękuję Ci za pomoc. To był mój błąd bo zamiast stworzyć aplikację stworzyłem hook. A teraz utworzyłem ją uruchomiłem dodatek Membersync i tam wprowadziłem w odpowiedniej funkcji kod. Problem rozwiązany.

Opublikowano
55 minut temu, maxerxxl napisał:

 

Bardzo dziękuję Ci za pomoc. To był mój błąd bo zamiast stworzyć aplikację stworzyłem hook. A teraz utworzyłem ją uruchomiłem dodatek Membersync i tam wprowadziłem w odpowiedniej funkcji kod. Problem rozwiązany.

 

Jednak mam jeszcze jedno pytanie. Dlaczego wywala mi błąd z tego pliku gdzie mam połączenie do zewnętrznej bazy danych?

<?php
/**
 * @brief		serverSync Task
 * @author		<a href='https://www.invisioncommunity.com'>Invision Power Services, Inc.</a>
 * @copyright	(c) Invision Power Services, Inc.
 * @license		https://www.invisioncommunity.com/legal/standards/
 * @package		Invision Community
 * @subpackage	serversync
 * @since		28 Apr 2019
 */

namespace IPS\serversync\tasks;

/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
	header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
	exit;
}

/**
 * serverSync Task
 */
class _serverSync extends \IPS\Task
{
	public $_connection;

	public function _getConnection()
	{
		return $this->_connection;
	}

	/**
	 * Execute
	 *
	 * If ran successfully, should return anything worth logging. Only log something
	 * worth mentioning (don't log "task ran successfully"). Return NULL (actual NULL, not '' or 0) to not log (which will be most cases).
	 * If an error occurs which means the task could not finish running, throw an \IPS\Task\Exception - do not log an error as a normal log.
	 * Tasks should execute within the time of a normal HTTP request.
	 *
	 * @return	mixed	Message to log or NULL
	 * @throws	\IPS\Task\Exception
	 */
	public function execute()
	{
		try {
			$this->_connection = \IPS\Db::i('external', array(
				'sql_host'        => 'xxx',
				'sql_user'        => 'xxxx',
				'sql_pass'        => 'xxx',
				'sql_database'    => 'xxx',
				'sql_port'        => 3306,
				'sql_socket'    => '/var/lib/mysql.sock',
				'sql_utf8mb4'    => true,
			));
		}

		catch( \IPS\Db\Exception $e ){}
	}
	
	/**
	 * Cleanup
	 *
	 * If your task takes longer than 15 minutes to run, this method
	 * will be called before execute(). Use it to clean up anything which
	 * may not have been done
	 *
	 * @return	void
	 */
	public function cleanup()
	{
		
	}
}

 

Błąd

Using $this when not in object context

Opublikowano

Metoda \IPS\Task nie posiada konstruktora, więc nie możesz użyć $this.

 

PS: Nie musisz przypisywać połączenia do zmiennej, jęsli używasz \IPS\Db, ustawiłeś połączenie i identyfikator na 'external', więc w każdym zapytaniu używaj \IPS\Db::i('external'), to jest Twoja 'zmienna' identyfikująca właśnie to połączenie.

  • Dziękuję 1
  • Manager
Opublikowano
11 godzin temu, maxerxxl napisał:

To był mój błąd bo zamiast stworzyć aplikację stworzyłem hook.

 

W dniu 23.04.2019 o 10:05, DawPi napisał:

 

 

 

  • Zmieszany 1

intermedia - profesjonalne rozwiązania Invision Power Board

---

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

Opublikowano
12 godzin temu, Da Ruś napisał:

Metoda \IPS\Task nie posiada konstruktora, więc nie możesz użyć $this.

 

PS: Nie musisz przypisywać połączenia do zmiennej, jęsli używasz \IPS\Db, ustawiłeś połączenie i identyfikator na 'external', więc w każdym zapytaniu używaj \IPS\Db::i('external'), to jest Twoja 'zmienna' identyfikująca właśnie to połączenie.

 

Czy podczas wykonywania zapytania muszę dodawać warunek czy istnieje połączenie czy po prostu jeżeli nie połączy się z inną bazą danych to nie wyświetli błędu?


        $connection = \IPS\Db::i('test');

 

        if (isset($connection)) {

            $connection->insert('users', array(

                'id' => $member->member_id,

                'username' => $member->name,

                'email' => $member->email,

                'password' => $member->members_pass_hash,

                'ip' => $member->ip_address,

            ));

        }

Opublikowano

Jeszcze mam ostatnie pytanie. Jak jest zdefiniowane połączenie z zewnętrzną bazą danych jeżeli ustawię połączenie w kategorii Logowanie i rejestracja kont?

 

\IPS\Db::i('external_database')

Opublikowano

Ok dzięki za pomoc. A wiesz może w jaki sposób mogę wyłączyć stronę przez plik php? Bo chciałbym zrobić że jak zewnętrza baza danych nie będzie odpowiadać to forum ma być niedostępne.

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ę.