Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Linkerzeugung im SimpleMarker erweitern #25

Open
digedag opened this issue Jul 28, 2015 · 5 comments
Open

Linkerzeugung im SimpleMarker erweitern #25

digedag opened this issue Jul 28, 2015 · 5 comments

Comments

@digedag
Copy link
Owner

digedag commented Jul 28, 2015

Der SimpleMarker sollte vor der Linkerzeugung den Data-Record des aktuellen Items in das data-Attribut des cObject schreiben. Damit kann die Link-Erzeugung Bezug auf diesen Datensatz nehmen. Man kann bspw. die Zielseite ändern oder das Alt- bzw. Title-Tag mit Informationen aus dem Datensatz befüllen.
Nachteil: Man hat keinen Zugriff mehr auf das Content-Element. Da ist in aller Regel das Plugin in tt_content.

@digedag
Copy link
Owner Author

digedag commented Jul 30, 2015

Ein alternative Weg wäre die Nutzung des data-Wraps im cObject. Mit einem DataWrap kann man auf Attribute eines Datensatz einer anderen Tabelle zugreifen.

.typolink.ATagParams = title="{field:uid}"
.typolink.ATagParams.insertData = 1

Damit holt der Wrap die uid aus dem aktuellen Array in cObj.data. Statt field kann man auch Schlüssel wie page, tsfe, getenv usw. verwenden. Ausgewertet wird das ganze in ContentObjectRenderer::getData()
Und diese Methode hat auch einen Hook, mit dem man eigene Schlüsselwörter nutzen kann:

        if (is_array($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_content.php']['getData'])) {
            foreach ($GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_content.php']['getData'] as $classData) {
                $hookObject = GeneralUtility::getUserObj($classData);
                if (!$hookObject instanceof \TYPO3\CMS\Frontend\ContentObject\ContentObjectGetDataHookInterface) {
                    throw new \UnexpectedValueException('$hookObject must implement interface TYPO3\\CMS\\Frontend\\ContentObject\\ContentObjectGetDataHookInterface', 1195044480);
                }
                $retVal = $hookObject->getDataExtension($string, $fieldArray, $secVal, $retVal, $this);
            }
        }

Über rn_base könnten wir einen Container bereitstellen in den die Markerklassen relevante Objekt-Instanzen für den DataWrap zur Verfügung stellen können. Dann müssen wir nur noch diesen Hook implementieren und können auf die Daten zugreifen!

@oliverklee
Copy link
Contributor

Falls dabei Sachen generiert werden, die auf der Seite ausgegeben werden sollen/können, ist es wichtig, dass die Daten immer per htmlspecialchars enkodiert werden, damit man kein persistentes XSS hat.

@digedag
Copy link
Owner Author

digedag commented Jul 31, 2015

Es geht hier um die Bereitstellung von Daten aus den Entities, die das Plugin für die Ausgabe verarbeitet. Diese stammen aus der Datenbank und wurden in der Regel von BE-Nutzern angelegt. Wenn wir da ein RTE-Feld per htmlspecialchars bearbeiten, wäre das eher kontraproduktiv. 😉
Daten, die das Plugin in dem Aufruf aus dem Frontend vom User einsammelt, sind hier nicht gemeint.
Aber danke für den Hinweis!

@digedag
Copy link
Owner Author

digedag commented Jul 31, 2015

Was mir aber natürlich gerade einfällt, speziell für die Linkerzeugung sollte man HTML-Tags natürlich entwerten. Sonst entsteht auch kein valides HTML mehr.
Da die Verwendung von getData() über diesen Weg aber allgemein mehr Möglichkeiten auch für andere Ausgaben ermöglicht (nicht nur Linkerzeugung, sondern auch bei stdWrap von normalen Markern), sollte es trotzdem von rn_base in dem Fall nicht eingeschränkt werden. Das sollte dann IMHO im typolink konfiguriert werden.

@rengaw83
Copy link
Collaborator

Die Idee finde ich sehr gut!
Das würde nicht nur für die Linkerzeugung sondern auch für komplexe Entityübergreifende Ausgaben im TypoScript (DCMARKER / COA) sehr hilfreich sein.
Beispielsweise die Ausgabe einer der Kategorie in abhängigkeit von Newsattributen übers TypoScript ohne Einsatz einer UserFunc oder von Hooks bzw. Xclasses.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants