Im letzten Türchen des Adventskalender, sind noch drei „Helferlein“ versteckt, welche vielleicht auch in euren Extensions Sinn machen. Folgende Ideen könnt ihr bei euch unterbringen…
GEO Position
Für die Ermittlung einer GEO Position anhand einer IP Adresse, gibt es natürlich auch Erweiterungen, welche diese Aufgabe erfüllen. Diese müssen jedoch gewartet werden, weil die IP-Bereichs-Datenbanken aktuell gehalten werden müssen. Wer einmal „zwischendurch“ eine Position einer IP benötigt, dem ist vielleicht schon mit dieser Methode geholfen.
/** * @param string $ip * @return array|null */ public function getPosition($ip = NULL) { if ($ip === NULL) $ip = t3lib_div::getIndpEnv('REMOTE_ADDR'); try { $urlService = 'http://www.geoplugin.net/php.gp?ip=' . $ip; $content = unserialize(t3lib_div::getURL($urlService)); } catch (Exception $exc) { return NULL; } return sizeof($content) ? $content : NULL; } |
Aktuellen Tabellennamen im ExtBase Repository
Der Abstraktionlayer von ExtBase abstrahiert die Datenbank von TYPO3 vollständig. Wenn jedoch individuelle Abfragen (Statements) aus einem „generellen“ Repository abgeschickt werden sollen, dann wird der Tabellenname benötigt – und das natürlich dynamisch! Diese Methode holt sich den Tabellennamen aus den DataMappern, sodass sich auch Abfragen, mit von Hand geschriebenen SQL Queries, ein bisschen besser abstrahieren lassen (wenn überhaupt möglich 😉 ).
/** * Return the current tablename * * @return string */ protected function getTableName() { return $this->persistenceManager->getBackend()->getDataMapper()->getDataMap($this->getRepositoryClassName())->getTableName(); } |
Fluid Label mit Error Klasse
Mit diesem ViewHelper könnt ihr auch für eure Labels in Formularen eine ErrorClass definieren. Einfach mit…
<yourkey:form.label property="yourProperty">Name</yourkey:form.label> |
… auch das Label-Tag an die Property binden. Wenn die Eigenschaft eures Model dann im Validator zu einem Fehler führt, wird neben dem Formular-Feld auch das Label-Tag mit der passenden errorClass versehen.
class Tx_YourExtensionName_ViewHelpers_Form_LabelViewHelper extends Tx_Fluid_ViewHelpers_Form_AbstractFormFieldViewHelper { /** * @var string */ protected $tagName = 'label'; /** * Initialize the arguments. * * @return void */ public function initializeArguments() { parent::initializeArguments(); $this->registerArgument('errorClass', 'string', 'CSS class to set if there are errors for this view helper', FALSE, 'f3-form-error'); $this->registerUniversalTagAttributes(); } /** * Renders the textfield. * * @return string */ public function render() { if (strlen($this->arguments['property'])) { $this->setErrorClassAttribute(); $this->tag->addAttribute('for', $this->arguments['property']); } $this->tag->setContent($this->renderChildren()); return $this->tag->render(); } } |