2013-08-05 4 views
2

J'ai besoin d'aide pour comprendre la logique de hook de CodeIgniter afin d'adapter le code à mes besoins.CodeIgniter Hooks pour la bibliothèque Active Record

La page: http://ellislab.com/codeigniter/user-guide/general/hooks.html

En fait, je devais modifier le pilote de base de données pour MySQL depuis:

function _from_tables($tables) 
{ 
    if (! is_array($tables)) 
    { 
     $tables = array($tables); 
    } 
return '('.implode(', ', $tables).')'; 
} 

à ceci:

function _from_tables($tables) 
{ 
    if (! is_array($tables)) 
    { 
     $tables = array($tables); 
    } 
return implode(', ', $tables); 
} 

J'ai fait ce mod à utiliser Requêtes UNION utilisant la bibliothèque Active Record.

Quelqu'un peut-il m'aider à faire un crochet afin d'empêcher que ma modification ne soit écrasée lors de la mise à jour du système principal?

Merci d'avance!

+2

Je pense que vous êtes à la recherche des bibliothèques sur mesure, pas de crochets . Voir http://ellislab.com/codeigniter/user-guide/general/creating_libraries.html -> remplacement des bibliothèques avec vos propres versions. Vous pouvez étendre le pilote de base de données et remplacer une méthode ou deux par votre propre version personnalisée. –

Répondre

1

Vous pouvez trouver les instructions pour l'extension des pilotes db sur le pilote DB CodeIgniter Wiki - Extending Database Drivers

The solution comes in 3 simple steps:

1) Extend your loader class by creating the file MY_Loader.php. Put it into your libraries directory in the application path (or if you are using CI 2.x.x then put it into application\core\ path):

2) Add the following function to your MY_Loader class:

3) Create your Database driver extension class, that you name MY_DB_mysql_driver.php (or substitute the mysql part for whatever driver you use - do that also for the classnames in the code below!). Put this file also in your applications libraries directory:

Votre personnalisé ressemblera à ceci

class MY_DB_mysql_driver extends CI_DB_mysql_driver { 

    function __construct($params){ 
    parent::__construct($params); 
    log_message('debug', 'Extended DB driver class instantiated!'); 
    } 

    function _from_tables($tables) 
    { 
     if (! is_array($tables)) 
     { 
      $tables = array($tables); 
     } 
     return implode(', ', $tables); 
    } 

} 
+0

Je ne savais pas que je pouvais modifier les fonctions CI avec des aides! Je l'ai fait pour quelques fonctions dont j'avais besoin, mais pas pour le noyau :) Merci! – Marcandria

+0

Je reçois les erreurs suivantes lorsque vous utilisez votre méthode: Une erreur PHP a été rencontré Gravité: 8192 Message: Attribution de la valeur de retour de nouveau par référence est dépréciée Nom du fichier: core/MY_Loader.php Numéro de ligne: 32 Que puis-je faire? – Marcandria

+0

Quelle version de PHP? – user20232359723568423357842364

Questions connexes