RealURL valueDefault language

Hallo zusammen,
damit in TYPO3 kein doppelter Content entsteht, sollte man die default-Language in der URL direkt mit darstellen, ansonsten wird domain.ltd/home und domain.ltd/de/home als doppelter Content gezählt. Um das zu vermeiden, kann man ein wenig an der Config von RealURL arbeiten.

RealURL-Teil-Auszug — NICHT komplette Konfiguration!

<?php
$GLOBALS&#91;'TYPO3_CONF_VARS'&#93;&#91;'EXTCONF'&#93;&#91;'realurl'&#93; = array (
    '_DEFAULT' => array (
        'preVars' => array (
            '0' => array (
                'GETvar' => 'no_cache',
                'valueMap' => array (
                    'nc' => '1',
                ),
                'noMatch' => 'bypass'
            ),
            '1' => array (
                'GETvar' => 'L',
                'valueMap' => array (
                    'de' => '0',
                    'en' => '1',
                    'fr' => '2',
                ),
                'valueDefault' => 'de', // default language 
                //'noMatch' => 'bypass',
            ),
            '2' => array (
                'GETvar' => 'lang',
                'valueMap' => array (
                    'de' => 'de',
                    'en' => 'en',
                    'fr' => 'fr',
                ),
                'noMatch' => 'bypass',
            ),
        ),
    ),
);
?>

Dann würde ich noch auf dem Root-Pfad im Seitenbaum ein Shortcut auf eine Unterseite machen. Somit entsteht direkt eine URL mit Sprach-Segemet (http://domain.ltd/de/SEITENNAME). Und alle anderen Semantischen-Links haben das Sprachsegment mit im Pfad.

Viel Spaß damit

Meta tags, extended (metatags) probleme, Seite bleibt weiß!

Wer mit dem Update auf Typo3 4.7.x eine weiße Seite durch mit folgenden Fehler bekommt:

<?php
 Fatal error: Call to undefined method tslib_content_PhpScript::stdWrap() in /html/typo3/typo3conf/ext/metatags/meta.php on line 45
?>

Muss sich nur kurz Zeit nehmen und nicht direkt in Panik geraten 😉

Download

Lösung:

<?php
 // function: $this->stdWrap();
 // replace with new function since 4.7: $this->cObj->stdWrap();

// Line: 45 & 46
// directory: /typo3conf/ext/metatags/meta.php 
// Old:
$localDescription = trim($this->stdWrap($local['description'],$local['description.']));
$localKeywords = trim($this->stdWrap($local['keywords'],$local['keywords.']));

// New:
$localDescription = trim($this->cObj->stdWrap($local['description'],$local['description.']));
$localKeywords = trim($this->cObj->stdWrap($local['keywords'],$local['keywords.']));
?>

Viel Spaß 😉

TwitterAPI mit PHP abrufen

Hallo zusammen,
wer braucht es nicht… ein Tweet auf seiner eigen Seite oder etwas individueller… aber ohne ein Plugin aus WordPress sondern auf seinem eigenen System.
Mit diesem kleinen Beispiel kann man sich schnell und einfach die Tweets auf seine Webseite holen. Das einzige was gebraucht wird, ist PHP 😉 Ach so noch ein kleiner Hinweis… der Cache wurde eingebaut, weil Twitter bei 1000 aufrufen an die API zu einer TwitterPerson dicht macht und man dann ein Tag keine weiteren Daten bekommen kann. Mit der Datei wird es aktuell nur 1x Stunde angefragt 😉

<?php
/**
 * Created by JetBrains PhpStorm.
 * User: marcfinnern
 * Date: 24.08.12
 * Time: 10:47
 */
class twitter {

    function twitter_api($screenname, $maxItems="3", $cacheTime="60"){
        $url = "https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=$screenname&count=$maxItems";

        // Caching
        $cachedatei = "cache/twitter_".$screenname.".txt";
        $cacheTime = time()-($cacheTime*60);

        if (file_exists($cachedatei)){
            if (filemtime($cachedatei)<$cacheTime){
                $daten = file_get_contents($url);
                file_put_contents($cachedatei, $daten);
            }
            else {
                $daten = file_get_contents($cachedatei);
            }
        }
        else {
            $daten = file_get_contents($url);
            file_put_contents($cachedatei, $daten);
        }
        // Caching - End


        $result = json_decode($daten);
        $count = 0;
        echo '<ul id="twitter_api">'."\n";
        foreach($result as $tweet) {
            if($count < $maxItems){

                if($count == 0){
                    $class = "first";
                } else if ($count == ($maxItems-1)) {
                    $class = "last";
                } else {
                    $class = "middle";
                }

                $date = date("d M",strtotime($tweet->created_at));
                $search = array(
                    $tweet->entities->urls[0]->url,
                    "@".$tweet->entities->user_mentions[0]->screen_name,
                    "#".$tweet->entities->hashtags[0]->text

                );
                $replace = array(
                    '<a href="'.$tweet->entities->urls[0]->url.'" target="_blank">'.$tweet->entities->urls[0]->expanded_url.'</a>',
                    '<a href="https://twitter.com/'.$tweet->entities->user_mentions[0]->screen_name.'" target="_blank">@'.$tweet->entities->user_mentions[0]->screen_name.'</a>',
                    '<a href="https://twitter.com/search/'.$tweet->entities->hashtags[0]->text.'" target="_blank">#'.$tweet->entities->hashtags[0]->text.'</a>'
                );


                echo '  <li class="'.$class.'">'."\n";
                echo '      <span class="title"><strong>'.$date." | ".$tweet->user->name.'</strong> <a href="https://twitter.com/'.$tweet->user->screen_name.'" target="_blank">@'.$tweet->user->screen_name.'</a></span>'."\n";
                echo '      <span class="desc">'.str_replace($search,$replace,$tweet->text).'</span>'."\n";
                echo '  </li>'."\n";
            }
            $count++;
        }
        echo "</ul>"."\n";
    }
}

Im weiteren sind dann die Sachen für den Quellcode so zu schreiben.
Hinweiß: Man muss dem Cache-Ordner die Rechte 777 oder 0777 geben, damit die Daten abgelegt werden können.

<?php
/*
* Einladen der Twitter-Class
* Und verfügbar machen in einer Variable
* Defaults: $screenname, $maxItems="3", $cacheTime="60"
*/

require("class/twitter.php");
$tw = new twitter();

# Wiedergabe des tweets (3x + 1 Stunde Cachezeit):
$tw->twitter_api("klickfabrik");

# Wiedergabe von 10 Tweets, 30 Minuten Cachezeit
$tw->twitter_api("klickfabrik","10","30");
?>

Wenn man das ganze auch in WordPress nutzen will, muss man zusätzlich noch folgendes machen, damit es auch in einem z.B. PHP-Widget verfügbar ist:

<?php
/*
* Daten werden unter der function.php im WordPresstheme abgelegt und wie folgt aktiviert
*/
#Zeile 11-70 einfügen (also nur die function)
function twitter_api($screenname, $maxItems="3", $cacheTime="60"){
..
.
}

#diese Zeile unter der function anhängen, damit WordPress damit arbeiten kann.
add_action('twitter_api', 'twitter_api');


/* 
* Caching anpassung für WordPress
* Wird dann im Theme-Ordner abgelegt und gespeichert
* Bitte das alte Caching ersetzen 😉
*/
$wordpressDir = explode("/themes/",get_bloginfo('template_url'));
$wordpressDir = "wp-content/themes/".$wordpressDir&#91;1&#93;."/";
$cachedatei = $wordpressDir."cache/twitter_".$screenname.".txt";
?>

Viel Spaß damit,
euer Marc

realURL & “Keine news_id übergeben.”

Hallo zusammen,
an alle die auch hier das Problem mit RealURL und tt_news haben, hier die Lösung 🙂

Auch wenn es längst kein Bug mehr sein sollte, kann es sein, dass genau dieser Eintrag nicht in die Datenbank kommt und dafür sorgt, dass nach dem Ausgeben des Links, keine ID übegeben wird und der Fehler: ” Keine news_id übergeben. ” kommt.

Installiert wenn nötig die EXT: phpmyadmin und tragt diesen Code über SQL ein.

CREATE TABLE tx_realurl_uniqalias(
uid int( 11 ) NOT NULL AUTO_INCREMENT ,
tstamp int( 11 ) NOT NULL default ‘0’,
tablename varchar( 50 ) NOT NULL default ”,
field_alias varchar( 30 ) NOT NULL default ”,
field_id varchar( 30 ) NOT NULL default ”,
value_alias varchar( 255 ) NOT NULL default ”,
value_id int( 11 ) NOT NULL default ‘0’,
lang int( 11 ) NOT NULL default ‘0’,
expire int( 11 ) NOT NULL default ‘0’,
PRIMARY KEY ( uid ) ,
KEY tablename( tablename ) ,
KEY bk_realurl01( field_alias, field_id, value_id, lang, expire ) ,
KEY bk_realurl02( tablename, field_alias, field_id, value_alias( 222 ) , expire )
)

Danach einfach den Cache leeren und well done 🙂

realURL und Cal (Calender Base)

Hallo zusammen, für alle die RealURL und CAL benutzen.

Hier diesen Code verwenden für eine schöne URL:
>> http://www.seo4typo3.de/ical/details/termin/event/view-month|page_id-38/tx_cal_phpicalendar/2010/09/17/tag_der_offnen_tuer/

Einfach die CAL Config zwischen den postVarSets kopieren wie hier im Beispiel.

<?php

$GLOBALS&#91;'TYPO3_CONF_VARS'&#93;&#91;'EXTCONF'&#93;&#91;'realurl'&#93; = array ( 
..
..
        'postVarSets' => array (
            '_DEFAULT' => array (
            
            
            // CAL (Calender Base Config)
            'termin'=> array(
				array(
				  'GETvar' => 'tx_cal_controller[view]'
				),
				array(
				  'GETvar' => 'tx_cal_controller[lastview]'
				),
				array(
				  'GETvar' => 'tx_cal_controller[type]'
				),
				array(
				  'GETvar' => 'tx_cal_controller[year]',
				) ,
				array(
				  'GETvar' => 'tx_cal_controller[month]',
				) ,
				array(
				  'GETvar' => 'tx_cal_controller[day]',
				) ,
				array(
					'GETvar' => 'tx_cal_controller[uid]',
					'lookUpTable' => array(
						'table' => 'tx_cal_event',
						'id_field' => 'uid',
						'alias_field' => 'title',
						'addWhereClause'  => ' AND NOT deleted',
						'useUniqueCache' => 1,
						'useUniqueCache_conf' => array(
							'strtolower' => 1,
							'spaceCharacter' => '_',
						),
					),
				),
				array(
					'GETvar' => 'tx_cal_controller[gettime]'
				),
				array(
						'GETvar' => 'tx_cal_controller[preview]'
				),
	
			),
            // Cal Config - END
..
..

); 

?>

Viel Spaß 🙂
Marc