Die Knowlegdebase wird nun über das Backend komplett gepflegt. Wie wird ein Webseitenbesucher die Knowledgebase vermutlich nutzen? Der Nutzer, der nicht weiß wonach er suchen soll, wird mit der Auswahl einer Kategorie näher an sein Ziel gelockt. Der versierte Nutzer weiß was er will und gibt über die Suche das entsprechende Suchwort ein. Damit dies etwas moderner wirkt, soll der Nutzer nicht mit jeder Suchanfrage einen Button "Suche" klicken. Vielmehr soll die Suche in Echtzeit erfolgen. Los gehts...
Das Frontend wird im Verzeichnis conf/frontend/ angelegt. Dazu wird der Ordner knowledgebase angelegt. Wie auch im Backend werden auch bestimmte Verzeichnisse im Frontend benötigt: configuration, controller, etc, lang, model, template und view. Im Verzeichnis configuration wird die Datei Configuration.php mit dem folgenden Inhalt angelegt.
?php
/**
* memyc.org, © 2014-2018. All rights reserved.
*
* Memyc - Me and my content. The Frontend / Backend framework
*
* @author Andreas Lehmann
*/
namespace memyc\feuser\knowledgebase {
defined('SEC_VAR') or die('Direct access to this location is not allowed');
/**
* Class Configuration
*
* Configuration for knowledgebase
*
* @package memyc\feuser\knowledgebase
*/
class Configuration
{
const DEPENDENCIES = 'memyc\frontend\content,memyc\feuser\jquery';
/**
* @var array Call this extension for given content type
*/
public $aContentPluginFor = array('search');
/**
* @var array JS files to load on demand
*/
public $jsBottomPageOnDemandFileList = array(
'etc/js/default.js',
);
}
}
Als Abhängigkeiten gibt es hier jQuery, damit AJAX-Anfragen nicht händisch programmiert werden müssen. Neu ist hier das Array jsBottomPageOnDemandFileList. Dieses sorgt dafür, dass die Javascriptdatei default.js an das Ende der Frontendausgabe gehangen wird. Und zwar immer nur dann, wenn auch die Knowledgebase geladen wird. Dies hat den Vorteil, dass die JS-Datei nur dann geladen wird wenn sie benötigt wird.
Die Datei Controller.php in controller hat den folgenden Aufbau:
?php
/**
* memyc.org, © 2014-2018. All rights reserved.
*
* Memyc - Me and my content. The Frontend / Backend framework
*
* @author Andreas Lehmann
*/
namespace memyc\feuser\knowledgebase{
defined('SEC_VAR') or die('Direct access to this location is not allowed');
/**
* Class Controller
*
* @package memyc\feuser\knowledgebase
*/
final class Controller
{
/**
* 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();
$this->oMycTools = new MycTools($this->oRequest, $this->oResponse);
}
/**
* Routing
*
* @return array
*/
public function init()
{
$init[] = array();
return $init;
}
Im Verzeichnis etc wird das Verzeichnis js angelegt. Darin wird die Datei default.js benötigt, die bei Bedarf geladen wird. Dazu gleich noch mehr. Im Verzeichnis model wird die Datei Model.php mit dem folgenden Inhalt benötigt:
?php
/**
* memyc.org, © 2014-2018. All rights reserved.
*
* Memyc - Me and my content. The Frontend / Backend framework
*
* @author Andreas Lehmann
*/
namespace memyc\feuser\knowledgebase{
/**
* Class Model
*
* @package memyc\feuser\knowledgebase
*/
class Model extends \memyc\bootstrap\mycbase\Model
{
}
}
Und zu guter letzt im Verzeichnis view die Datei View.php mit folgendem Inhalt:
?php
/**
* memyc.org, © 2014-2018. All rights reserved.
*
* Memyc - Me and my content. The Frontend / Backend framework
*
* @author Andreas Lehmann
*/
namespace memyc\feuser\knowledgebase {
defined('SEC_VAR') or die('Direct access to this location is not allowed');
/**
* Class View
*
* View for knowledgebase
*
* @package memyc\feuser\knowledgebase
*/
class View extends \memyc\bootstrap\mycbase\View
{
}
}
Wird nun wieder das Frontend mit dem Plugin aufgerufen wird immer noch die Meldung "Type knowledgebase is not defined." angezeigt. Dies soll sich nun ändern.