J'essayais de lire et de comprendre du code joomla PHP) lorsque je suis tombé sur cette fonction. Il se trouve dans la ligne libraries/joomla/table/table.php 268. À la fin de la fonction à la ligne 305, il retourne un objet créé par $tableClass
, ce que je ne comprends pas, c'est où est ce $tableClass
classe définie? Voici une liste complète de la fonction:
public static function getInstance($type, $prefix = 'JTable', $config = array())
{
// Sanitize and prepare the table class name.
$type = preg_replace('/[^A-Z0-9_\.-]/i', '', $type);
$tableClass = $prefix . ucfirst($type);
// Only try to load the class if it doesn't already exist.
if (!class_exists($tableClass))
{
// Search for the class file in the JTable include paths.
jimport('joomla.filesystem.path');
$paths = self::addIncludePath();
$pathIndex = 0;
while (!class_exists($tableClass) && $pathIndex < count($paths))
{
if ($tryThis = JPath::find($paths[$pathIndex++], strtolower($type) . '.php'))
{
// Import the class file.
include_once $tryThis;
}
}
if (!class_exists($tableClass))
{
// If we were unable to find the class file in the JTable include paths, raise a warning and return false.
JLog::add(JText::sprintf('JLIB_DATABASE_ERROR_NOT_SUPPORTED_FILE_NOT_FOUND', $type), JLog::WARNING, 'jerror');
return false;
}
}
// If a database object was passed in the configuration array use it, otherwise get the global one from JFactory.
$db = isset($config['dbo']) ? $config['dbo'] : JFactory::getDbo();
// Instantiate a new table class and return it.
return new $tableClass($db);
}
Joomla est flexible et détendu avec le stockage physique de Table-Classes.
La mauvaise manière (je pense que vous n'utilisez pas de débogueur) est de réécrire la ligne suivante
$ chemins = self :: addIncludePath ();
à:
var_dump ($ chemins = self :: addIncludePath ());
Ainsi, vous verrez les chemins où sont stockées les classes de classe.
Les composants tiers indiquent à Joomla l'emplacement de leurs propres tables. Surtout comme ce qui suit.
JTable :: addIncludePath ('/ administrator/components/nomcomposant/tables');
Si vous recherchez une table de composant tierce, consultez le fichier/administrator/nomcomposant/tables