it-swarm.com.de

Frage zu JTable :: getInstance in der Datei libraries / joomla / table / table.php

Ich habe versucht, einen Joomla-Kern zu lesen und zu verstehen PHP), als ich auf diese Funktion stieß. Sie befindet sich in der Zeile 268 von libraries/joomla/table/table.php. Am Ende der Funktion In Zeile 305 wird ein Objekt zurückgegeben, das von $tableClass, was ich nicht verstehe ist, wo ist das $tableClass Klasse definiert? Es folgt eine vollständige Liste der Funktion:

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);
}
1
shenkwen

Joomla ist flexibel und entspannt bei der physischen Aufbewahrung von Table-Classes.

Der schmutzige Weg (ich glaube, Sie verwenden keinen Debugger) besteht darin, die folgende Zeile neu zu schreiben

$ path = self :: addIncludePath ();

zu:

var_dump ($ path = self :: addIncludePath ());

Sie sehen also die Pfade, in denen die Table-Class gespeichert ist.

Komponenten von Drittanbietern teilen Joomla mit, wo sich ihre eigenen Tabellen befinden. Meistens wie folgt.

JTable :: addIncludePath ('/ administrator/components/componentname/tables');

Wenn Sie nach einer Komponententabelle eines Drittanbieters suchen, sehen Sie in den Tabellen/administrator/Komponentenname/nach

2
JProof