Memyc Entwicklung anhand einer Wissensdatenbank

Ziel: "Eine Wissensdatenbank soll es Webseitenbesuchern ermöglichen, dass Sie über Suchwörter einen entsprechenden Artikel finden. Ist das Suchwort nicht bekannt, soll der Webseitenbesucher über die Auswahl der Kategorie entsprechende Artikel gezeigt bekommen."

Mit der Erweiterung "Wissensdatenbank", ich nenne Sie nun Knowledgebase, soll Entwicklern die Möglichkeit gegeben werden sich in die Programmierung von Memyc einzufinden. Durch die strikte Trennung von Backup und Frontend kann man sich zuerst dem Backend zuwenden und dann in aller Ruhe das Frontend programmieren.

Knowledgebase im Backend

Zu allerest wird eine Basisstruktur benötigt, die nahezu für alle neuen Anwendungen anwendbar ist.

Lege innerhalb des Verzeichnis /conf/backend/ das Verzeichnis "knowledgebase" an. Innerhalb des Verzeichnisses "knowledgebase" werden für den ersten Teil vier Verzeichnisse benötigt: configuration, controller, model und view. Innerhalb des Verzeichnisses configuration wird die Datei Configuration.php mit folgendem Inhalt angelegt:

[?php
/**
 * memyc.org, © 2014-2018. All rights reserved.
 *
 * Memyc - Me and my content. The Frontend / Backend framework
 *
 * @author  Andreas Lehmann
 */
namespace memyc\beuser\knowledgebase {
    defined('SEC_VAR') or die('Direct access to this location is not allowed');
    /**
     * Class Configuration
     *
     * Configuration for knowledgebase
     *
     * @package memyc\beuser\knowledgebase
     */
    class Configuration
    {
        const DEPENDENCIES = 'memyc\backend\backendaccess';
        /**
         * @var array CSS files to load always
         */
        public $cssAlwaysLoadFileList = array(
            'etc/css/default.css',
        );
    }
}

defined('SEC_VAR') or die('Direct access to this location is not allowed'); verhindert, dass die Datei direkt über den Browser aufgerufen werden kann. Innerhalb der Konstante DEPENDENCIES wird kommasepariert festgelegt, von welchen anderen Modulen die Knowledgebase abhängt. In diesem Fall ist es memyc\backend\backendaccess, da die Knowledgebase erst nach dem Login aufgerufen wird.

Hierbei ist zu sagen, dass alle Module und deren Abhängigkeiten topologisch sortiert werden. Das bedeutet, dass alle hier angefügten Module erst vor dem eigentlichen Modul geladen werden. Dies ist notwendig, wenn man beispielsweise Daten aus einem Modul benötigt und dieses vorab geladen werden muss.

Innerhalb des Verzeichnis model wird die Datei Model.php mit folgendem Inhalt angelegt:

[?php
/**
 * memyc.org, © 2014-2018. All rights reserved.
 *
 * Memyc - Me and my content. The Frontend / Backend framework
 *
 * @author  Andreas Lehmann
 */
namespace memyc\beuser\knowledgebase{
    defined('SEC_VAR') or die('Direct access to this location is not allowed');
    /**
     * Class Model
     *
     * @package memyc\beuser\knowledgebase
     */
    class Model extends \memyc\bootstrap\mycbase\Model
    {
    }
}

Es wird nur von memyc\bootstrap\mycbase\Model abgeleitet wodurch eine Menge an Methoden für die Entwicklung bereitstehen.

Innerhalb des Verzeichnis view wird die Datei View.php mit folgendem Inhalt angelegt:

[?php
/**
 * memyc.org, © 2014-2018. All rights reserved.
 *
 * Memyc - Me and my content. The Frontend / Backend framework
 *
 * @author  Andreas Lehmann
 */
namespace memyc\beuser\knowledgebase {
    defined('SEC_VAR') or die('Direct access to this location is not allowed');
    /**
     * Class View
     *
     * View for knowledgebase
     *
     * @package memyc\beuser\knowledgebase
     */
    class View extends \memyc\bootstrap\mycbase\View
    {
    }
}

Hier wird von memyc\bootstrap\mycbase\View abgeleitet wodurch auch hier eine Menge an Methoden für die Entwicklung bereitstehen.

Die Datei Controller.php wird im Verzeichnis controller angelegt und enthält den folgenden Inhalt:

[?php
/**
 * memyc.org, © 2014-2018. All rights reserved.
 *
 * Memyc - Me and my content. The Frontend / Backend framework
 *
 * @author  Andreas Lehmann
 */
namespace memyc\beuser\knowledgebase{
    defined('SEC_VAR') or die('Direct access to this location is not allowed');
    /**
     * Class Controller
     *
     * @package memyc\beuser\knowledgebase
     */
    final class Controller extends \memyc\bootstrap\mycbase\ControllerBackend
    {
        /**
         * Controller constructor.
         *
         * @param \memyc\interfaces\Request $oRequest
         * @param \memyc\interfaces\Response $oResponse
         */
        public function __construct(\memyc\interfaces\Request $oRequest, \memyc\interfaces\Response $oResponse)
        {
            $this->oRequest = $oRequest;
            $this->oResponse = $oResponse;
            $this->oRegistry = \memyc\resources\Registry::getInstance();
        }
        /**
         * Route
         *
         * @return array
         */
        public function init()
        {
            $init[] = array();
            return $init;
        }
    }
}

Die Datei sorgt dafür, dass alle Anfragen, Requests, und alle Ausgaben, Response, als sog. Dependency Injection geladen werden. Das bedeutet: Alle Anfragen, die reinkommen, kann die Erweiterung auswerten und entsprechend entscheiden, ob in irgendeiner Weise darauf in Form eines Response reagiert werden soll.

Sind alle Dateien ordnungsgemäß angelegt, kann man im Backend unter dem Menüpunkt Setup > Modules unter den Backend Modulen den Eintrag "memyc\beuser\knowledgebase" sehen. Die Erweiterung wird also bereits geladen.

Im nächsten Schritt werden im Backend wichtige Menüpunkte angelegt.