Using own library in your extensions/nl: Difference between revisions

From Joomla! Documentation

Created page with ""'Onze scenario voorbeelden:"' * <code>MylibUserHelper</code> klasse moet worden geplaatst in <code>/libraries/mylib/user/helper.php</code> * <code>MylibUser</code> klasse moe..."
No edit summary
 
(18 intermediate revisions by 4 users not shown)
Line 4: Line 4:


== Het ontdekken van Klassen ==
== Het ontdekken van Klassen ==
Klassen in een map die een naamgevingsconventie volgen kunnen worden geregistreerd, samen met JLoader [http://api.joomla.org/cms-2.5/classes/JLoader.html#method_discover ontdek ()] - methode. De ontdekmethode lijkt op de bestandsnamen in een map en registreerd klassen op basis van die namen. Aanvullende argumenten kunnen worden gebruikt voor het bijwerken van de klasse registratie en genest in sub-mappen.
Klassen in een map die een naamgevingsconventie volgen kunnen worden geregistreerd, samen met JLoader [https://api.joomla.org/cms-2.5/classes/JLoader.html#method_discover discover()] - methode. De ontdekmethode lijkt op de bestandsnamen in een map en registreert klassen op basis van die namen. Aanvullende argumenten kunnen worden gebruikt voor het bijwerken van de klasse registratie en genest in sub-mappen.
<source lang="php">
<source lang="php">
// Register all files in the /libraries/mylib folder as classes with a name like: MyLib<Filename>
// Register all files in the /libraries/mylib folder as classes with a name like: MyLib<Filename>
JLoader::discover('Mylib', JPATH_LIBRARIES . '/mylib');
JLoader::discover('Mylib', JPATH_LIBRARIES . '/mylib');
</source>
</source>
Line 15: Line 15:


==De voorvoegsel (Prefix) Loader ==
==De voorvoegsel (Prefix) Loader ==
Sinds Joomla Platform 12.1 (Joomla! CMS 3+), is er de mogelijkheid om in te achterhalen waar de auto-loader kijkt gebaseerd op basis van een class prefix (voorheen alleen de "J" prefix werd ondersteund, gebonden aan de /libraries/joomla-map). Dit wordt gedaan met de [http://api.joomla.org/Joomla-Platform/JLoader.html#registerPrefix registerPrefix()] methode en zorgt voor een aantal scenario's:
Sinds Joomla Platform 12.1 (Joomla! CMS 3+), is er de mogelijkheid om in te achterhalen waar de auto-loader kijkt gebaseerd op basis van een class prefix (voorheen alleen de "J" prefix werd ondersteund, gebonden aan de ''/libraries/joomla''-map). Dit wordt gedaan met de [https://api.joomla.org/cms-3/classes/JLoader.html#method_registerPrefix registerPrefix()] methode en zorgt voor een aantal scenario's:


* Een ontwikkelaar kan het registreren van de prefix van aangepaste klassen, en een root pad om de auto-loader om ze te vinden.
* Een ontwikkelaar kan het registreren van de prefix van aangepaste klassen, en een root pad om de auto-loader om ze te vinden.
Line 22: Line 22:


=== Standaardisatie ===
=== Standaardisatie ===
TDe class naam moet bij een camel case (gekoppelde woorden die normaliter met een spatie worden gescheiden) en elk segment van de klasse naam een pad naar de map waar het laatste deel van de naam wordt de naam van de class-bestand. Als er slechts één onderdeel om de naam van de klasse, de auto-loader zoekt naar het bestand in een map met dezelfde naam. Map namen moeten in kleine letters.
De class naam moet bij een camel case (gekoppelde woorden die normaliter met een spatie worden gescheiden) en elk segment van de klasse naam een pad naar de map waar het laatste deel van de naam wordt de naam van de class-bestand. Als er slechts één onderdeel om de naam van de klasse, de auto-loader zoekt naar het bestand in een map met dezelfde naam. Map namen moeten in kleine letters.


"'Voorbeelden:"'
"'Voorbeelden:"'
* <code>PrefixUserModel</code> klasse moet zich bevinden in <code>PATH_TO_PREFIX/user/model.php</code>
* <code>PrefixUserModel</code> klasse moet worden geplaatst in <code>PATH_TO_PREFIX/user/model.php</code>
* <code>PrefixUser</code> klasse moet zich bevinden in <code>PATH_TO_PREFIX/user/user.php</code>
* <code>PrefixUser</code> klasse moet worden geplaatst in <code>PATH_TO_PREFIX/user/user.php</code>


"'Onze scenario voorbeelden:"'
"'Onze scenario voorbeelden:"'
Line 32: Line 32:
* <code>MylibUser</code> klasse moet worden geplaatst in <code>/libraries/mylib/user/user.php</code>
* <code>MylibUser</code> klasse moet worden geplaatst in <code>/libraries/mylib/user/user.php</code>


Er is geen grens aan de diepte waarop de auto-loader zal zoeken, zolang het een geldig pad is op basis van de camel case. Merk op dat, hoewel de afkortingen en namen, zoals HTML, XML, MySQL hebben een standaard extentie in de tekst, met deze voorwaarden worden camel case regels afgevangen door de programmacode ("HTML" wordt "Html", "XML" wordt "Xml" enzovoort).


There is no limit to the depth to which the auto-loader will search, providing it forms a valid path based on the camel case natural of the class name. Note that while acronyms and names such as HTML, XML and MySQL have a standard presention in text, such terms should observe camel case rules programmatically ("HTML" becomes "Html", "XML" becomes "Xml" and so on).
=== Gebruik ===
 
=== Usage ===
<source lang="php">
<source lang="php">
// Tell the auto-loader to look for classes starting with "Mylib" in a specific folder.
// Tell the auto-loader to look for classes starting with '"Mylib" in a specific folder.
JLoader::registerPrefix('Mylib', JPATH_LIBRARIES . '/mylib');</source>
JLoader::registerPrefix('Mylib', JPATH_LIBRARIES . '/mylib');</source>
<source lang="php">
<source lang="php">
// Tell the auto-loader to also look in the /libraries/cms folder for "J" prefixed classes.
// Tell the auto-loader to also look in the "/libraries/cms" folder for "J" prefixed classes.
JLoader::registerPrefix('J', JPATH_PLATFORM . '/cms');</source>
JLoader::registerPrefix('J', JPATH_PLATFORM . '/cms');</source>
<source lang="php">
<source lang="php">
Line 46: Line 45:
JLoader::registerPrefix('J', '/my/platform/fork', true);</source>
JLoader::registerPrefix('J', '/my/platform/fork', true);</source>


=== Note on registerPrefix ===
===Opmerking over registerPrefix ===
For Joomla CMS 2.5, prefix cannot start with the same letter, otherwise the first matched will be tried to load. For example if we register prefix 'JM', as 'J' prefix exists so JLoader will find 'J' prefix. When it tries to search for class in the registered path of 'J', no class found.
Het Joomla CMS 2.5, voorvoegsel mag niet beginnen met dezelfde letter, anders zal de eerste geprobeerd worden om te laden. Bijvoorbeeld als wij registreren prefix 'JM', 'J' prefix bestaat dus JLoader vindt 'J' - voorvoegsel. Wanneer u probeert om te zoeken naar klasse in de geregistreerde pad van 'J', geen klasse gevonden.
    
    
== Namespace Loader ==
== Naamruimte Loader ==
As of Joomla CMS v3.1.2, the core autoloader has had support for autoloading [http://www.php-fig.org/psr/psr-0/ PSR-0] style namespaced libraries. (You can read up on PHP namespaces [http://php.net/manual/en/language.namespaces.php here]. If you only support Joomla on PHP 5.3+ (which you do if you only support Joomla CMS v3.x or greater), then you can utilize code that uses native PHP namespaces. In accordance with PSR-0 rules, the directory and file casing must match that of the PHP namespace and class.
Sinds Joomla CMS V3.1.2 heeft de core auto-loader ondersteuning voor auto-loading [https://www.php-fig.org/psr/psr-0/ PSR-0] style namespaced libraries. (U kunt dit op  [https://php.net/manual/en/language.namespaces.php PHP namespaces teruglezen].) Als u alleen Joomla op PHP 5.3+ ondersteunt (wat u doet als u alleen Joomla CMS V3.x of hoger ondersteunt) dan kunt u gebruikerscode die de oorspronkelijke PHP namespaces gebruikt. In overeenstemming met PSR-0 regelgeving, de map en bestandsnamen moeten overeenkomen met die van de PHP namespace an Klassen.


'''Example'''
'''Voorbeeld'''
* <code>MyLib\User\UserHelper</code> class must be located in <code>JPATH_LIBRARIES/src/MyLib/User/UserHelper.php</code>
* <code>MyLib\User\UserHelper</code> klasse moet worden geplaatst in <code>JPATH_LIBRARIES/src/MyLib/User/UserHelper.php</code>


=== Usage ===
=== Gebruik ===
<source lang="php">
<source lang="php">
// Tell the auto-loader to look for namespaced classes starting with MyLib in the JPATH_LIBRARIES/src directory
// Tell the auto-loader to look for namespaced classes starting with MyLib in the JPATH_LIBRARIES/src directory
JLoader::registerNamespace('MyLib', JPATH_LIBRARIES . '/src');</source>
JLoader::registerNamespace('MyLib', JPATH_LIBRARIES . '/src');</source>


== Accessing library from any place ==
== Toegang tot de bibliotheek vanaf elke plaats ==
To access our library from any place of an application we should create a system plugin which will register our library with the JLoader. This plugin should fire on <code>onAfterInitialise</code> event:
Voor toegang tot onze bibliotheek vanaf elke plek van een applicatie moeten we een systeemplugin maken die de plugin zal registreren onze bibliotheek met de JLoader. Deze plugin moet <code>onAfterInitialise</code> evenement starten:


=== Manifest file ===
=== Voorbeeldbestand ===
<source lang="xml">
<source lang="xml">
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
Line 84: Line 83:
</source>
</source>


=== Plugin file ===
=== Plugin bestand ===
<source lang="php">
<source lang="php">
<?php
<?php
Line 114: Line 113:
</source>
</source>


Now you will be able to call classes from your library (located in /libraries/mylib) from any component, module or plugin.
Nu is het mogelijk om klassen uit uw bibliotheek aan te roepen (in /bibliotheken/mylib) van elk component, module of plugin.


<noinclude>
<noinclude>
[[Category:Development]]
[[Categorie:Ontwikkeling]]
[[Category:Tutorials]]
[[Categorie:Tutorials]]
[[Category:Component Development]]
[[Categorie:Onderdeel Ontwikkeling]]
</noinclude>
</noinclude>

Latest revision as of 10:06, 25 December 2019

Er zijn verschillende manieren hoe u uw eigen bibliotheek met Joomla ' s autoloader en gebruik het in uw toestel. Al deze benaderingen zijn gebaseerd op de JLoader klasse. In deze tutorial gaan we er van uit dat uw bibliotheek zich bevindt in de "'/bibliotheken/mylib"' map.

Het ontdekken van Klassen

Klassen in een map die een naamgevingsconventie volgen kunnen worden geregistreerd, samen met JLoader discover() - methode. De ontdekmethode lijkt op de bestandsnamen in een map en registreert klassen op basis van die namen. Aanvullende argumenten kunnen worden gebruikt voor het bijwerken van de klasse registratie en genest in sub-mappen.

// Register all files in the /libraries/mylib folder as classes with a name like: MyLib<Filename>
JLoader::discover('Mylib', JPATH_LIBRARIES . '/mylib');

Zoals je kunt zien werkt deze methode als u speciale naamgeving volgt:

  • /mylib/user.php zal gelijk zijn aan MylibUser
  • /mylib/userhelper.php zal gelijk zijn aan MylibUserHelper

De voorvoegsel (Prefix) Loader

Sinds Joomla Platform 12.1 (Joomla! CMS 3+), is er de mogelijkheid om in te achterhalen waar de auto-loader kijkt gebaseerd op basis van een class prefix (voorheen alleen de "J" prefix werd ondersteund, gebonden aan de /libraries/joomla-map). Dit wordt gedaan met de registerPrefix() methode en zorgt voor een aantal scenario's:

  • Een ontwikkelaar kan het registreren van de prefix van aangepaste klassen, en een root pad om de auto-loader om ze te vinden.
  • Een ontwikkelaar kan een extra pad registreren voor een bestaand voorvoegsel (b.v. dit laat het Joomla CMS toe op maat gemaakte bibliotheken te hebben, maar nog steeds met de "J" - prefix).
  • Een ontwikkelaar voorvoegsel overschrijven. Dit kan worden gebruikt voor het volledig overschrijven van de kern klassen met een aangepaste vervanging.

Standaardisatie

De class naam moet bij een camel case (gekoppelde woorden die normaliter met een spatie worden gescheiden) en elk segment van de klasse naam een pad naar de map waar het laatste deel van de naam wordt de naam van de class-bestand. Als er slechts één onderdeel om de naam van de klasse, de auto-loader zoekt naar het bestand in een map met dezelfde naam. Map namen moeten in kleine letters.

"'Voorbeelden:"'

  • PrefixUserModel klasse moet worden geplaatst in PATH_TO_PREFIX/user/model.php
  • PrefixUser klasse moet worden geplaatst in PATH_TO_PREFIX/user/user.php

"'Onze scenario voorbeelden:"'

  • MylibUserHelper klasse moet worden geplaatst in /libraries/mylib/user/helper.php
  • MylibUser klasse moet worden geplaatst in /libraries/mylib/user/user.php

Er is geen grens aan de diepte waarop de auto-loader zal zoeken, zolang het een geldig pad is op basis van de camel case. Merk op dat, hoewel de afkortingen en namen, zoals HTML, XML, MySQL hebben een standaard extentie in de tekst, met deze voorwaarden worden camel case regels afgevangen door de programmacode ("HTML" wordt "Html", "XML" wordt "Xml" enzovoort).

Gebruik

// Tell the auto-loader to look for classes starting with '"Mylib" in a specific folder.
JLoader::registerPrefix('Mylib', JPATH_LIBRARIES . '/mylib');
// Tell the auto-loader to also look in the "/libraries/cms" folder for "J" prefixed classes.
JLoader::registerPrefix('J', JPATH_PLATFORM . '/cms');
// Tell the auto-loader to reset the "J" prefix and point it to a custom fork of the platform.
JLoader::registerPrefix('J', '/my/platform/fork', true);

Opmerking over registerPrefix

Het Joomla CMS 2.5, voorvoegsel mag niet beginnen met dezelfde letter, anders zal de eerste geprobeerd worden om te laden. Bijvoorbeeld als wij registreren prefix 'JM', 'J' prefix bestaat dus JLoader vindt 'J' - voorvoegsel. Wanneer u probeert om te zoeken naar klasse in de geregistreerde pad van 'J', geen klasse gevonden.

Naamruimte Loader

Sinds Joomla CMS V3.1.2 heeft de core auto-loader ondersteuning voor auto-loading PSR-0 style namespaced libraries. (U kunt dit op PHP namespaces teruglezen.) Als u alleen Joomla op PHP 5.3+ ondersteunt (wat u doet als u alleen Joomla CMS V3.x of hoger ondersteunt) dan kunt u gebruikerscode die de oorspronkelijke PHP namespaces gebruikt. In overeenstemming met PSR-0 regelgeving, de map en bestandsnamen moeten overeenkomen met die van de PHP namespace an Klassen.

Voorbeeld

  • MyLib\User\UserHelper klasse moet worden geplaatst in JPATH_LIBRARIES/src/MyLib/User/UserHelper.php

Gebruik

// Tell the auto-loader to look for namespaced classes starting with MyLib in the JPATH_LIBRARIES/src directory
JLoader::registerNamespace('MyLib', JPATH_LIBRARIES . '/src');

Toegang tot de bibliotheek vanaf elke plaats

Voor toegang tot onze bibliotheek vanaf elke plek van een applicatie moeten we een systeemplugin maken die de plugin zal registreren onze bibliotheek met de JLoader. Deze plugin moet onAfterInitialise evenement starten:

Voorbeeldbestand

<?xml version="1.0" encoding="utf-8"?>
<extension version="3.0" type="plugin" group="system" method="upgrade">
    <name>System - Mylib</name>
    <author>Joomla! Project</author>
    <creationDate>March 2013</creationDate>
    <copyright>Copyright (C) 2005 - 2013 Open Source Matters. All rights reserved.</copyright>
    <license>GNU General Public License version 2 or later.</license>
    <authorEmail>admin@joomla.org</authorEmail>
    <authorUrl>www.joomla.org</authorUrl>
    <version>1.0.0</version>
    <description>Simple example plugin to register custom library.</description>

    <files>
        <filename plugin="mylib">mylib.php</filename>
        <filename>index.html</filename>
    </files>
</extension>

Plugin bestand

<?php
/**
 * @copyright   Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later.
 */

defined('_JEXEC') or die;

/**
 * Mylib plugin class.
 *
 * @package     Joomla.plugin
 * @subpackage  System.mylib
 */
class plgSystemMylib extends JPlugin
{
    /**
     * Method to register custom library.
     *
     * return  void
     */
    public function onAfterInitialise()
    {
        JLoader::registerPrefix('Mylib', JPATH_LIBRARIES . '/mylib');
    }
}

Nu is het mogelijk om klassen uit uw bibliotheek aan te roepen (in /bibliotheken/mylib) van elk component, module of plugin.


Categorie:Ontwikkeling Categorie:Tutorials Categorie:Onderdeel Ontwikkeling