« Februar 2012»
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      

Kategorien

Blogrolls

Letzte Kommentare

Inline
04.02.2011 13:09

Archiv

Kopieren Sie diesen Link in Ihren RSS-Reader

RSS 0.91Nachrichten
RSS 2.0Nachrichten

Meist gelesene Posts

Wochentag lokalisiert mit Fluid aus einem DateTime Objekt...
763 mal angeschaut
03.02.2011 15:38
TYPO3 4.5 und kb_nescefe und Security Token
574 mal angeschaut
18.03.2011 17:43
TYPO3 Backend Layouts
552 mal angeschaut
27.04.2011 23:57
JQuery und IE9
528 mal angeschaut
24.03.2011 10:31
20.02.2012
21:28

TYPO3 Install Tool und session.auto-start is enabled

Aufgabenstellung

Nach einem TYPO3 Update (von 4.4.4 auf 4.5.11) geht das Install Tool nicht mehr. Ruft man es auf (ENABLE_INSTALL_TOOL ist erstellt) kommt die Meldung "session.auto-start is enabled". Per .htaccess wurde session.auto_start auf Off gestellt - dies kann man auch mit einem phpinfo() Aufruf validieren.

Lösung

In den neueren TYPO3 Versionen findet man in der typo3/sysext/install/mod/class.tx_install_session.php Zeile 123 folgenden Eintrag

if (ini_get('session.auto_start')) {

ändert man diesen wieder auf

if (ini_get('session.auto_start') == 1) {


so kommt man auch wieder ins Install Tool.

28.11.2011
12:30

Extbase, AJAX und sys_language_mode = strict

Aufgabenstellung

Datensätze sollen in einem JQGrid angezeigt werden. Es sollen jedoch nur die lokalisierten Datensätze dargestellt werden. Standardmäßig werden die Datensätze der Standardsprache angezeigt, wenn keine Übersetzung in der ausgewählten Sprache vorliegt.

sys_language_mode = strict

Im TYPOScript für die XML Ausgabe den sys_language_mode setzten:

tx_toco3whatever_ajax = PAGE
tx_toco3whatever_ajax {
 typeNum = 6001
  config {
    disableAllHeaderCode = 1
    disablePrefixComment = 1
    additionalHeaders = Content-type: text/xml
    xhtml_cleaning = 0
    admPanel = 0
    sys_language_mode = strict
  }

 

  10 = COA_INT
  10.10 < tt_content.list.20.toco3whatever_ajax
}

 

16.05.2011
11:21

tt_news, powermail und direct_mail_subscription verknüpfen

Aufgabenstellung

Events sollen mit tt_news (und newscalendar) dargestellt werden. Zu den einzelnen Veranstaltungen kann man sich per Formular anmelden. In dem Anmeldeformular gibt es auch eine Check-Box, die den Double-Opt-In zur Newsletteranmeldung anstoßen soll.

Daten aus tt_news an powermail übergeben

Auf die "Single-View" Seite von tt_news plazieren wir zusätzlich powermail. Über ein Erweiterungstemplate lesen wir den Newstitel (dieser Beinhaltet den Eventnamen) und das Datum aus und übergeben diese an powermail:

lib.news = COA
lib.news {
10 = RECORDS
10 {
# id des template-records
source = {GPvar:tx_ttnews|tt_news}
source.insertData = 1
tables = tt_news
conf.tt_news >
conf.tt_news = TEXT
conf.tt_news.field = title
}

20 = RECORDS
20 {
# id des template-records
source = {GPvar:tx_ttnews|tt_news}
source.insertData = 1
tables = tt_news
conf.tt_news >
conf.tt_news = TEXT
conf.tt_news.field = tx_newscalendar_calendardate
conf.tt_news.strftime =  am %A, %d.%m.%Y
}
}


lib.newsTitel = COA
lib.newsTitel{

5 = TEXT
5.value = <input type="hidden" id="uid7" name="tx_powermail_pi1[uid7]" value="

10 = COA
10 < lib.news

15 = TEXT
15.value = "/>

20 = COA
20 < lib.news
}

Im Powermail fügt man ein TYPOScript Objekt ein - in unserem Fall als erstes Element, so dass der Name des Events gleich ganz oben steht.

Double-Opt-In von direct_mail_subscription auslösen

Powermail unterstützt userfunc somit kann man beim Absenden des Formulars den Double-Opt-In starten:

Wir ergänzen das Erweiterungstemplate um folgenden TYPOScript:

# include library
includeLibs.user_powermailvorgangsnummer = fileadmin/libs/user.tx_powermaildirectmailsubscription.php


plugin.tx_powermail_pi1.dynamicTyposcript {
directmailsubscription = USER
directmailsubscription {
userFunc = user_powermaildirectmailsubscription->subscribe
# subscribe field
userFunc.subscribe = uid5
# name field
userFunc.name = uid1
# email field
userFunc.email = uid3
#content uid
userFunc.formuid = 24
}

}

die Ids muss man sich entsprechend aus dem Formular heraussuchen.

user.tx_powermaildirectmailsubscription.php könnte z.B. so aussehen:

<?php
require_once (PATH_tslib.'media/scripts/fe_adminLib.inc');
require_once(t3lib_extMgm::extPath('direct_mail_subscription').'pi/class.dmailsubscribe.php');


class user_powermaildirectmailsubscription {
 
 
 /**
  * subscribe() subscribe user
  *
  * @param string  $content: content to userFunc is empty
  * @param array  $conf: conf array from ts
  * @return void
  */
 function subscribe($content = '', $conf = array()) {
  $subscribe = $GLOBALS['TSFE']->fe_user->sesData['powermail_'.$conf['userFunc.']['formuid']][$conf['userFunc.']['subscribe']];
  if (strlen(implode(",", $subscribe)) > 0) {
      $email = $GLOBALS['TSFE']->fe_user->sesData['powermail_'.$conf['userFunc.']['formuid']][$conf['userFunc.']['email']];
      $name = $GLOBALS['TSFE']->fe_user->sesData['powermail_'.$conf['userFunc.']['formuid']][$conf['userFunc.']['name']];    

             $conf = $GLOBALS['TSFE']->tmpl->setup['plugin.']['feadmin.']['dmailsubscription.'];

               // simulate registerprocess
               $_POST['FE']['tt_address']['email'] = $email;
               $_POST['FE']['tt_address']['module_sys_dmail_html']     = 1;

               // Initialisierung feAdmin Objekt              
               $ua = new user_feAdmin();
               $ua->cObj = t3lib_div::makeInstance('tslib_cObj');
               $ua->init($content,$conf);

  }
 }
}

?>

Jetzt muss man noch diese Userfunktion auslösen. Dazu bauen wir folgenden Marker in die Empfänger-Mail:

###POWERMAIL_TYPOSCRIPT_DIRECTMAILSUBSCRIPTION###

11.05.2011
13:54

automatische Sprachwahl bei der Integration von TYPO3 in Facebook

Automatische Sprachwahl bei der Integration von TYPO3 in Facebook

In unserem letzten Blog Eintrag haben wir beschrieben, wie man TYPO3 in Facebook integrieren kann. Dieser Beitrag erklärt, wie man zusätzlich noch die Sprache der integrierten TYPO3 Site automatisch auf die in Facebook gewählte Sprache schaltet.

Vorbereitung

Zunächst legt man ganz gewöhnlich die Sprachen in TYPO3 an und übersetzt die Seiten. Wir zeigen hier ein Beispiel für einen Single-Tree, dieses läßt sich aber auch auf den Multi-Tree Ansatz übertragen. Das TYPOScript sollte schon soweit funktionieren, dass sich die Sprache über einen Parameter auswählen läßt, d.h. es sollte etwas in diese Art im TYPOScript zu finden sein:

 

config.linkVars = L

#English, sys_language.uid = 0
[globalVar = GP:L = 0]
config.sys_language_uid = 0
config.language = en
config.locale_all = en_GB
config.htmlTag_langKey = en

#German, sys_language.uid = 1
[globalVar = GP:L = 1]
config.sys_language_uid = 1
config.language = de
config.locale_all = de_DE
config.htmlTag_langKey = de
[global]

Die ausgwählte Sprache von Facebook abfragen

Die Sprache, die der Facebook User eingestellt hat, läßt sich über eine User Funktion in TYPOScript abfragen.

Hierzu benötigt man zunächst ein entsprechendes Skript. Da der TYPO3 Core die localconf.php teilweise öfter ausführt kommt es zu Fehlern, wenn man die Funktion direkt dort hineinschreibt. Daher erstellt man ein neues File in typo3conf, z.B. facebook.php mit folgenden Inhalt:

<?php
function parse_signed_request($signed_request, $secret)
{
    list($encoded_sig, $payload) = explode('.', $signed_request, 2);
    // decode the data
    $sig = base64_url_decode($encoded_sig);
    $data = json_decode(base64_url_decode($payload), true);

    if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
        error_log('Unknown algorithm. Expected HMAC-SHA256');
        return null;
    }
    // check sig
    $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
    if ($sig !== $expected_sig) {
        error_log('Bad Signed JSON signature!');
        return null;
    }
    return $data;
}
function base64_url_decode($input)
{
    return base64_decode(strtr($input, '-_', '+/'));
}

function user_facebook($lan)
{
    $app_secret = "f170ea8186b8acf89a511a4295148f27";
    $data = parse_signed_request($_REQUEST['signed_request'], $app_secret);
    $page_user = $data['user'];
    if ($lan == $page_user['locale']) {
        return true;
    } else {
        return false;
    }
}

?>

 

diese wir dann in der localconf.php inkludiert:

include_once('facebook.php');

(wichtig: include_once verwenden!) 

TYPOScript anpassen

Im letzten Schritt wird über eine UserFunc die Facebook Locale abgefragt und dementspechend die Sprache gesetzt:

[userFunc = user_facebook(de_DE)]
config.sys_language_uid = 1
config.language = de
config.locale_all = de_DE
config.htmlTag_langKey = de
[end]

(das PHP File muss vorher nicht über TYPOScript inkludiert werden, der Eintrag in der localconf.php reicht aus)

06.05.2011
21:43

TYPO3 in Facebook integrieren

Seit noch gar nicht so langer Zeit kann man in Facebook wieder IFrame Tabs verwenden. Somit ist es möglich Inhalte von einem beliebigen Server in Facebook auf eine Facebook Seite zu integrieren und somit natürlich auch Inhalte aus TYPO3

Facebook Seite erstellen

Zunächst benötigt man eine Facebook Seite. Den Erstellungs-Prozess kann man z.B. von der Facebook Login Seite aus starten:

Facebook Anwendung erstellen

Im nächsten Schritt erstellt man eine Facebook Anwendung. Dazu öffnet man folgende URL: http://www.facebook.com/developers/ und klickt auf "Erstelle eine neue Anwendung":

 

 

 

 

Im ersten Schritt muss man der Anwendung einen Namen geben und den Bedingungen zustimmen:

Nachdem man die Sicherheitskontrolle "bestanden" hat, geht es richtig los. Auf dieser Maske ist das "Symbol" wichtig, denn dieses wird dann später in der Navigation angezeigt:

auf dem Reiter "Website" kommt in das Feld "Site URL" die URL der Seite, die man im IFrame anzeigen möchte - hierfür sollte man in TYPO3 eine Seite angelegt haben, die eine Breite von 520px hat (aus Mangel an solch einer Seite für diese Anleitung bauen wir unsere komplette Homepage ein):

Im Tab "Facebook Integration" müssen die Felder "Canvas Page", "Canvas-URL", "Name des Reiters" (wird nachher im Menü verwendet) und "URL des Reiters" ausgefüllt werden:

Nach dem Speichern muß man noch die erstellte Anwendung der Seite hinzufügen. Dafür geht man zunächst auf die "Anwendungs-Profilseite":

Auf der Profilseite findet man link unten den Link "Zu meiner Seite hinzufügen". In der Box wählt man dann die Seite aus, auf der die Anwendung angezeigt werden soll:

Das war es schon, auf der ausgewählten Seite befindet sich nun ein neuer Navigationpunkt. Wird dieser ausgewählt öffnet sich unsere Seite in einem IFrame (in dem Screenshot sieht man, was passiert, wenn die Seite breiter als 520 Pixel ist ;-) ):

Somit hat man die volle Kontrolle über die Inhalte der Seite in TYPO3. Natürlich kann man auch Javascript verwenden, oder z.B. mit Google Analytics die Besucher tracken...