Hauptmenü

Werkzeuge

Kategorien

Archiv

Einhell

Anderes Template für Extbase Action verwenden

Erstellt in Extension Entwicklung, TS Schnipsel, TYPO3 am 29. August 2013 vom Daschmi

Möchte man ein anderes Template als für die action vorgesehen verwenden, so kann man folgenden Aufruf verwenden:

$this->view->setTemplatePathAndFilename(\TYPO3\CMS\Core\Utility\GeneralUtility::getFileAbsFileName(
  ‚typo3conf/ext/‘.
  $this->request->getControllerExtensionKey().
  ‚/Resources/Private/Templates/Frage/login_user.html‘
));

Möchte man diesen Aufruf in der loginAction() des FrageControllers verwenden, so musste in TYPO3 6.1.3 ein leeres Template login.html existieren. Sonst kam ein Fehler auch wenn man das Template login.html gar nicht verwendet.

Formhandler verwenden mit simplem SPAM Schutz

Erstellt in TS Schnipsel, TYPO3 am 13. Juli 2013 vom Daschmi

Formular mit dem Formhandler einbinden

Um den Formhandler einzusetzen muss die Extension aus dem TER installiert werden. Anschließend muss es auf einer Seite eingebunden werden. Im TS der Seite genügt dann folgender Code:

plugin.Tx_Formhandler.settings {
  debug = 0
  templateFile = fileadmin/templates/kontakt.html
  langFile = fileadmin/templates/kontakt.xml
  formValuesPrefix = fh
  additionalIncludePaths.1 = fileadmin/templates/
  validators {
    1 {
      class = Tx_Formhandler_Validator_Default
      config {
        fieldConf {
          homepage.errorCheck.1 = simpleantispam
          text.errorCheck.1 = simpleantispam
          name.errorCheck.1 = simpleantispam
          NameS.errorCheck.1 = required
          TextS.errorCheck.1 = required
        }
      }
    }
  }
  finishers {
    1 {
      class = Tx_Formhandler_Finisher_Mail
    }
    24 {
      class = Tx_Formhandler_Finisher_Redirect
    }
  }
  singleErrorTemplate {
    totalWrap = |
    singleWrap = |
  }
  errorListTemplate {
    totalWrap = <p class="error">Folgende Fehler sind aufgetreten</p><ul class="error">|</ul><br />
    singleWrap = <li>|</li>
  }
}

Im Beispiel sind die Felder NameS und TestS als Pflichtfelder definiert und müssen angegeben werden. Die Felder homepage, text und name sind mit dem ErrorCheck „simpleantispam“ definiert.

Einfacher SPAM Schutz

Der einfache SPAM Schutz basiert auf der Tatsache das Bots die Formulare meist komplett ausfüllen. Wir prüfen also einfach ob Felder die für den User nicht sichtbar sind ausgefüllt wurden. Wenn ja, kann davon ausgegangen werden das es sich um einen automatischen Eintrag handelt. Damit das ganze funktioniert müssen die Felder homepage, text und name im Formular verbaut werden aber dürfen nicht angezeigt werden.

Hier ein Muster Template:

fileadmin/templates/kontakt.html6

<!– ###TEMPLATE_FORM1### begin –>

###ERROR###

<form id="mailform" name="mailform" method="post" action="#" enctype="multipart/form-data" style="padding-left:20px;">

	###HIDDEN_FIELDS###

		<div class="form-row">
			<div class="field-label">Name:</div>
			<div class="field-widget"><input type="text" name="fh[NameS]" class="required" value="###value_NameS###" title="Bitte einen Namen angeben !" onblur="pkon(1)" /></div>
		</div>
		<div class="form-row">
			<div class="field-label">eMail:</div>
			<div class="field-widget"><input name="fh[EMail_Adresse]" class="required validate-email" value = "###value_EMail_Adresse###" title="Bitte E-Mail Addresse eingeben !" onblur="pkon(2)" /></div>
		</div>
		<div class="form-row">
			<div class="field-label">Ort:</div>
			<div class="field-widget"><input name="fh[Ort]" class="normal" value = "###value_Ort###" title="Bitte Wohnort eingeben !" onblur="pkon(3)" /></div>
		</div>
		<div class="form-row">
			<div class="field-label">Straße:</div>
			<div class="field-widget"><input name="fh[Strasse]" class="normal" value = "###value_Strasse###" title="Bitte die Straße eingeben !" onblur="pkon(3)" /></div>
		</div>
		<div class="form-row">
			<div class="field-label">Telefon:</div>
			<div class="field-widget"><input name="fh[Telefon]" class="normal" value = "###value_Telefon###" title="Bitte eine Telefonnummer eingeben !" onblur="pkon(3)" /></div>
		</div>
		<div class="form-row">
			<div class="field-label">Frage:</div>
			<div class="field-widget"><textarea name="fh[TextS]" class="required" cols="40" rows="10">###value_SText###</textarea></div>
		</div>

		<div style="position:absolute; left:-1000px; top:-1000px;">
			<input type="text" name="fh[homepage]" value="" tabindex="50" class="formulartext"/>
			<input type="text" name="fh[text]" value="" tabindex="50" class="formulartext"/>
			<input type="text" name="fh[name]" value="" tabindex="50" class="formulartext"/>
		</div>

		<div style = "clear:both;"></div>
		<br/>
		<div style="margin:0px; padding:0px;">
			<div style = "clear:both;"></div>
			<br/>
			<input type="submit" value="Anfrage senden" ###submit_nextStep### />
		</div>
	<br/>

</form>
<!– ###TEMPLATE_FORM1### end –>

Damit der errorChecvk „simpleantispam“ auch funktioniert muss das folgende Script geladen sein. Es funktioniert im Prinzip umgekehrt wie der required Error Check:

fileadmin/templates/Tx_Formhandler_ErrorCheck_Simpleantispam.php

<?php

	class Tx_Formhandler_ErrorCheck_Simpleantispam extends Tx_Formhandler_AbstractErrorCheck
	{

		public function check() {

			$checkFailed = “;

			if (!empty($this->gp[$this->formFieldName]))
			{

				$checkFailed = $this->getCheckFailed();

			}

			return $checkFailed;

		} // public function check()

	} // class Tx_Formhandler_ErrorCheck_Simpleantispam extends Tx_Formhandler_AbstractErrorCheck

?>

Damit die Fehler noch korrekt angezeigt werden muss die Sprachdatei noch hinterlegt werden.

fileadmin/templates/kontakt.xml

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<T3locallang>
  <meta type="array">
    <description>Language labels for my form</description>
  </meta>
  <data type="array">
    <languageKey index="default" type="array">
			<label index="error_homepage_simpleantispam"></label>
			<label index="error_text_simpleantispam"></label>
			<label index="error_name_simpleantispam"></label>
			<label index="error_NameS_required">Bitte einen Namen angeben</label>
			<label index="error_TextS_required">Bitte einen Text angeben</label>
    </languageKey>
  </data>
</T3locallang>

Die Empfänger der Kunden- und Admin Mail lassen sich einfach im Flexform einstellen. Die Inhalte der Mail müssen dann im Template noch definiert werden:

fileadmin/templates/kontakt.html

<!– ###TEMPLATE_SUBMITTEDOK### begin
  OPTIONAL – will be shown if form was submitted and all required fields were filled out
–>
	<p>Vielen Dank f&uuml;r ihre Anfrage, wir werden sie so schnell wie m&ouml;glich bearbeiten</p>
<!– ###TEMPLATE_SUBMITTEDOK### end –>

<!– ###TEMPLATE_EMAIL_USER_PLAIN### begin
    OPTIONAL – this will be the email text that is sent to the user (plaintext!)
–>
Hallo ###value_NameS###,
Wir werden ihre Anfrage so schnell wie möglich bearbeiten

M.f.G.
<!– ###TEMPLATE_EMAIL_USER_PLAIN### end –>

<!– ###TEMPLATE_EMAIL_ADMIN_PLAIN### begin
    OPTIONAL – this will be the email text that is sent to the admin (plaintext!)
    (admin-email = the email you can specify in the mailformplus plugin)
–>
Hallo, ein Nutzer schrieb folgendes :

Name: ###value_NameS###
Email: ###value_EMail_Adresse###
Text: 

###value_TextS###

<!– ###TEMPLATE_EMAIL_ADMIN_PLAIN### end –>

border=“0″ aus TYPO3 Bildelementen entfernen

Erstellt in TS Schnipsel, TYPO3 am 3. Mai 2013 vom Daschmi

TYPO3 fügt den Bilder standardmäßig border=“0″ hinzu, was bei neueren Doctypes im Validator zu Warnungen führt.

Die Fehlermeldung im Validator lautet:

[text]… there is no attribute <code>"border" …</code>[/text]

Um das Border Attribute zu entfernen, genügt es im TypoScript der Seite folgenden Code einzubinden:


config.disableImgBorderAttr = 1

TYPO3 Userfunktion aufrufen über TYPO3 4.6 MVC Konzept mit Extbase und Fluid

Erstellt in TYPO3 am 9. Februar 2013 vom Daschmi

In alten TYPO3 Versionen konnten PHP Funktionen aus dem Typoscript ganz einfach mittels folgendem Aufruf aufgerufen werden:

lib.breadcrumbs.stdWrap.postUserFunc = tx_extension_pi1->getBreadcrumb

Wenn man aber das MVC Konzept von TYPO3 4.3 mit Extbase und Fluid nutzen möchte muss man etwas anders vorgehen.

10 = USER
10 {
  userFunc = tx_extbase_core_bootstrap->run #Nicht verändern
  pluginName = Extension #Name des Plugins eintragen (Case sensitive)
  extensionName = Extension #Name der Extension (Case sensitive)
  controller = Data #Name des Controllers der aufgerufen werden soll
  action = breadcrumb  #Name der Action die aufgerufen werden soll
  switchableControllerActions {
    Data { #Controllername ersetzen
      1 = breadcrumb  #Actionname ersetzen
    }
  }
  # so belassen
  settings =< plugin.tx_vjkaevents.settings
  persistence =< plugin.tx_vjkaevents.persistence
  view =< plugin.tx_vjkaevents.view
}

Den Pluginnamen bekommt man aus der ext_localconf.php des Plugins heraus:

  Tx_Extbase_Utility_Extension::configurePlugin(
    $_EXTKEY,
    ‚Extension‘,    /* Pluginname ! */
    array(
      ‚Data‘ => ‚list, show, breadcrumb‘, /*Action hinzutragen! */
    ),
    array(
      ‚Data‘ => “,
    )
  );

Im Controller muss dann die entsprechende Action definiert werden:


  class Tx_Extension_Controller_DataController extends Tx_Extbase_MVC_Controller_ActionController
  {

    public function breadcrumbAction()
    {

      return ‚Ausgabe der Userfunc‘;

    }

  }

Typo3 FLUID Template Funktionen

Erstellt in TYPO3 am 7. Februar 2013 vom Daschmi

  • RTE Texte ausgeben (<link> etc. ersetzen)
    <f:format.html>{events.teaser}</f:format.html>
  • Eintrag nur anzeigen wenn nicht leer
    <f:if condition="{events.showonlyifnotempty}">
    {data.showonlyifnotempty}
    </f:if>
  • Bilder anzeigen
    <f:image src="uploads/tx_vjkaevents/{data.image}" width="280" height="210" alt="{data.titel}" />
  • Arrays mit foreach durchgehen
    <f:for each="{events.FileData}" as="document"> … 
  • Auf Seite mit Controller und Action verlinken
    <f:link.action pageUid="{settings.singlePid}" action="show" arguments="{data:data}">{data.titel}</f:link.action>

TemplaVoila! Probleme nach Update auf 4.7.2

Erstellt in TYPO3 am 29. Juli 2012 vom Daschmi

Während des Updates auf TYPO3 4.7.2 wird die Spalte „t3ver_swapmode“ von der Tabelle „pages“ entfernt. Die templavoila Version 1.7.0 benötigt diese Spalte aber zur Korrekten bearbeitung der Inhaltselemente. Das Problem äußert sich darin, dass über die Web Ansicht keine Inhaltselemente angelegt werden könnne. Über die List Ansicht ist dies weiterhin möglich, die Sortierung in mögliche templavoila Spalten funktioniert aber dann auch nicht.

Abhilfe schaft es die Spalte „t3ver_swapmode“ nicht zu löschen, in dem man die entsprechende Aktion beim Update deaktiviert. Alternativ kann man die Spalte auch wieder mit folgendem SQL Query anlegen:

[sql]
ALTER TABLE pages ADD t3ver_swapmode tinyint(4) NOT NULL default ‚0‘
[/sql]

Problem trit mit folgenden Versionen auf:

TYPO3: 4.7.2
templavoila: 1.7.0

Weitere Informationen findet man auch im TYPO3 Bugtracker.

TYPO3 auf PHP 5.4

Erstellt in TS Schnipsel, TYPO3 am 29. März 2012 vom Daschmi

Wer TYPO3 auf PHP 5.4 betreibt, bekommt unter Umständen seltsame Ausgaben von Notices und Warnungen im Backend und Installtool. In PHP 5.4 wurde E_STRICT in E_ALL aufgenommen.

Abhilfe schafft hier folgender Eintrag in der localconf.php:

$TYPO3_CONF_VARS['SYS']['errorHandlerErrors'] = 'E_ALL ^ E_NOTICE ^ E_DEPRECATED ^ E_NOTICE';

Icon für Verzeichnis im direct_mail Modul

Erstellt in TS Schnipsel, TYPO3 am 26. Oktober 2011 vom Daschmi

Sollte das Verzeichnis Icon im Bereich direct_mail nicht angezeigt werden, so kann dies mit folgender Zeile in der Datei /typo3conf/ext/direct_mail/ext_tables.php behoben werden:

$ICON_TYPES[‚dmail‘] = array(‚icon‘ => t3lib_extMgm::extRelPath($_EXTKEY).’ext_icon.gif‘);

Suchergebnis auf bestimmten Seitenzweig einschränken mit indexed_search

Erstellt in TS Schnipsel am 9. September 2011 vom Daschmi

Um die Suche auf einen bestimmten Zweig im Baum einzuschränken kann folgender Code verwendet werden

plugin.tx_indexedsearch._DEFAULT_PI_VARS.sections=rl2_168

In diesem Beispiel würde die Suche nur Seiten unterhalb der PID 168 finden. Die PID muss dabei in der 2. Ebene (rl2) unter dem Webroot liegen.

PHP Script über TS Script einbinden

Erstellt in TS Schnipsel am 3. September 2011 vom Daschmi

Möchte man ein PHP Script über ein TypoScript Element einbinden kann man PHP_SCRIPT oder PHP_SCRIPT_INT verwenden. Die Einbindung kann dann wie folgt aussehen:

lib.datum = PHP_SCRIPT
lib.datum {
    file = fileadmin/datum.php
}

In dem PHP Script darf keine Ausgabe mittels echo erfolgen. Die Ausgabe muss einfach in die Variable $content geschrieben werden:

<?php
  $content = date("d.m.Y");
?>

Die Rückgabe des Scriptes wird gecached, möchten sie dies verhindern verwenden sie statt PHP_SCRIPT einfach PHP_SCRIPT_INT