Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

Von Hand: eine Fetch-Funktion

Templates fetch( 'hello', 'newest', ... ) geben - einen Modulordner registrieren, function_definition.php und die Sammlungsklasse schreiben und die Funktion aus einem Template aufrufen, geprüft.

Download as PDF

Address: https://doc.exponential.earth/exphelp/viewer/help/extension-development/part-3-extension-developer/tutorials/by-hand-fetch-function.md

On this page

This page is a translation. Read the English original

Von Hand: eine Fetch-Funktion

Tutorial 11. Sie geben Templates fetch( 'hello', 'newest', hash( 'class_identifier', 'article' ) ), die neuesten Knoten einer Klasse. Eine Fetch-Funktion gehört zu einem Modul, daher registriert dieses Tutorial auch den Modulordner, den das nächste Tutorial mit Views füllt. Die Dateien unten haben php -l bestanden, und der Template-Aufruf am Ende wurde von der Template-Engine gerendert, nachdem der Modulordner dem Modulpfad hinzugefügt worden war.

1. Den Modulordner registrieren

extension/mysite_hello/settings/module.ini.append.php:

<?php /* #?ini charset="utf-8"?

[ModuleSettings]
ExtensionRepositories[]=mysite_hello

*/ ?>

2. Die Definition

extension/mysite_hello/modules/hello/function_definition.php:

<?php
$FunctionList = array();

$FunctionList['newest'] = array(
    'name' => 'newest',
    'call_method' => array( 'class' => 'mysiteHelloFunctionCollection',
                            'method' => 'fetchNewest' ),
    'parameters' => array(
        array( 'name' => 'class_identifier', 'type' => 'string', 'required' => true ),
        array( 'name' => 'parent_node_id', 'type' => 'integer', 'required' => false, 'default' => 2 ),
        array( 'name' => 'limit', 'type' => 'integer', 'required' => false, 'default' => 5 )
    )
);

3. Die Sammlungsklasse

extension/mysite_hello/classes/mysitehellofunctioncollection.php:

<?php
/**
 * Fetch functions of the module "hello":
 *   fetch( 'hello', 'newest', hash( 'class_identifier', 'article', 'limit', 3 ) )
 */
class mysiteHelloFunctionCollection
{
    public static function fetchNewest( $classIdentifier, $parentNodeID = 2, $limit = 5 )
    {
        $limit = max( 1, min( (int)$limit, 50 ) );
        $nodes = eZContentObjectTreeNode::subTreeByNodeID(
            array( 'ClassFilterType' => 'include',
                   'ClassFilterArray' => array( (string)$classIdentifier ),
                   'SortBy' => array( 'published', false ),
                   'Limit' => $limit ),
            (int)$parentNodeID
        );
        return array( 'result' => is_array( $nodes ) ? $nodes : array() );
    }
}

Das Limit wird begrenzt und die IDs werden umgewandelt, weil ein Template Werte aus der Adresse übergeben kann. Das Ergebnis wird in array( 'result' => ... ) verpackt, das der Kernel wieder auspackt.

4. Prüfen und einschalten

php -l extension/mysite_hello/modules/hello/function_definition.php
php -l extension/mysite_hello/classes/mysitehellofunctioncollection.php
php bin/php/ezpgenerateautoloads.php -e
php bin/php/ezcache.php --clear-all

5. Verwenden

{def $newest = fetch( 'hello', 'newest', hash( 'class_identifier', 'article', 'limit', 2 ) )}
{foreach $newest as $node}[{$node.name|wash}]{/foreach}
{fetch( 'hello', 'newest', hash( 'class_identifier', 'nothing_like_this' ) )|count}
{undef $newest}

Auf der Installation, die für dieses Buch verwendet wurde (mit ihrer eigenen Artikelklasse), gab die erste Zeile die Namen der beiden neuesten Artikel aus und die zweite 0.

6. Wenn es nicht funktioniert

MeldungAbhilfe
Missing function definition file for module: helloExtensionRepositories[] fehlt oder die Erweiterung ist inaktiv; Caches
Function 'newest' in module 'hello' did not return a result valuedie Methode muss array( 'result' => ... ) zurückgeben
Class 'mysiteHelloFunctionCollection' not foundAutoloads neu erzeugen

7. Committen

git -C extension/mysite_hello add modules classes settings
git -C extension/mysite_hello commit -m "Added: The fetch function hello/newest"

Verwandte Seiten

Werden Sie Exponential-Partner

Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x