Hallo Community,
ich möchte ein Inserttag definieren, mit dem ich Icons z.b. bei Überschriften einbinden kann. Es soll so funktionieren, dass ich z.B. den Inserttag {{zmdi::zmdi-comment-outline::zmdi-hc-fw}} eingebe und mir das entsprechende Icon (Angabe nach dem ersten "::") mit der enstsprechenden css-Klasse (Angabe nach dem zweiten "::") angezeigt wird. So, wie man es z.B. von "netzmacht\font-awesome" kennt, nur das ich ein anderes Icon-Pack nutzen muss.
Habe mich dazu alten Tutorials bedient, die anscheinend aber nicht funktionieren bei mir. Mein Problem ist, dass ich sehr wenige PHP Programmierkenntnisse habe und das ganze Konstrukt daher auch nicht richtig verstehe. Ich habe die Hoffnung, dass ich jemand von Euch bereit erklärt, mir das zu erklären, was ich machen muss.
Ich habe folgende Dateien angelegt:
Code:
- zmdi-inserttag
-- config
---> autoload.php
---> config.php
-- classes
--- contao
---- inserttags
-----> InsertTagHelper.php
Diese Ordnerstruktur habe ich in das Verzeichnis "/system/modules" geladen.
Hier der Inhalt der Dateien:
autoload.php
PHP-Code:
<?php
/**
* Variables
*/
$strFolder = 'zmdi_inserttag';
$strNamespace = 'mynamespace\\' . $strFolder;
/**
* Register the namespaces
*/
ClassLoader::addNamespaces(array
(
$strNamespace
));
/**
* Register the classes
*/
ClassLoader::addClasses(array
(
// Classes
$strNamespace . '\classes\contao\inserttags\InsertTagHelper' => "system/modules/$strFolder/classes/contao/inserttags/InsertTagHelper.php"
));
config.php
PHP-Code:
<?php
$GLOBALS['TL_HOOKS']['replaceInsertTags'][] = array('\mynamespace\zmdi_inserttag\classes\contao\inserttags\InsertTagHelper', 'zmdi');
InsertTagHelper.php
PHP-Code:
<?php
namespace mynamespace\zmdi_inserttag\classes\contao\inserttags;
/**
* Class InsertTagHelper
* @package mynamespace\zmdi_inserttag\classes\contao\inserttags
*/
class InsertTagHelper
{
public function zmdi($string)
{
$arrSplit = explode('::', $string);
if ($arrSplit[0] == 'zmdi')
{
if (isset($arrSplit[1]))
{
return '<i class="zmdi ' . $arrSplit[1] . '"></i>';
}
if (isset($arrSplit[1]) && isset($arrSplit[2]))
{
return '<i class="zmdi ' . $arrSplit[1] . ' ' . $arrSplit[2] . '"></i>';
}
if (isset($arrSplit[3]))
{
return 'Fehler! Zuviele zmdi Paramenter!';
}
else
{
return 'Fehler! zmdi ohne Parameter!';
}
}
// kein Insert-Tag
return false;
}
}
Die CSS-Datei für die Icons binde ich im Layout manuell ein.
Wenn ich jetzt im Contao-Manager den "Production Cache" neu aufbaue und ein "dump autoload" durchführe, scheint Contao das was ich da geschrieben habe anzunehmen, auf der Seite wird mir dann aber "Es ist ein Fehler aufgetreten" angezeigt. In der Logdatei steht:
Code:
[2019-07-18 11:56:23] request.CRITICAL: Uncaught PHP Exception Symfony\Component\Debug\Exception\ClassNotFoundException: "Attempted to load class "InsertTagHelper" from namespace "\mynamespace\zmdi_inserttag\classes\contao\inserttags". Did you forget a "use" statement for another namespace?" at serverpfad/contao/vendor/contao/core-bundle/src/Resources/contao/library/Contao/System.php line 182
Ich checke natürlich nicht, was mein Fehler ist. Ich finde aber auch kein Tutorial, wo das besser beschrieben ist. Es hat bestimmt was mit der Contao Version zu tun, da das Tutorial glaub ich für Contao 3 geschrieben wurde, seit dem sich aber sicher viel verändert hat.
Ich würde mich freuen, wenn mir jemand sagen könnte, wo ich was anders machen muss.
Lesezeichen