SEO Titel mit tt_news

Hallo zusammen,
für alle die ihren eigenen PageTitle verwenden und das auch mit tt_news machen wollen, hier die Lösung 😉
Viel Spaß damit Red lion design – SEO Cardiff

# **
# * Seitennamen von tt_News Name // Konstanten
# ********************
page_news_detail = xx

# **
# * Seitennamen von tt_News Name // setup
# ********************
[globalVar = TSFE:id = {$page_news_detail}]
config.noPageTitle = 2
temp.headertitle = COA
temp.headertitle {
wrap = |
10=RECORDS
10 {
# id des template-records
# < typo3 4.7 # source = {GPvar:tx_ttnews|tt_news} # > typo3 4.7
source = {GP:tx_ttnews|tt_news}
source.insertData = 1
tables = tt_news
conf.tt_news >
conf.tt_news = TEXT
conf.tt_news.field=title
}
15 = TEXT
15.value =
15.noTrimWrap= || – |
20 = TEXT
20.field = subtitle
20.if.isTrue.field = subtitle
20.noTrimWrap= || – |
30 = TEXT
# read pagetitle from template
30.data = TSFE : tmpl | setup | sitetitle
30.ifEmpty = FIRMENNAME
stdWrap.noTrimWrap = | |||
}
[end]
page.headerData.10 < temp.headertitle [/code]

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ß 😉

SocialMediaBar mit TypoScript

Wer wollte nicht schon immer mal für seine eigene Seite eine SocialMediaBar haben und auf jeder Seite Like’n / Google’n oder Twittern können…
hier mit dem kleinen TypoScript kann man das locker umsetzen.

Konstanten:
baseURL = http://www.domain.ltd/

Setup:
# **
# * socialmediabox
# ********************
lib.field_smb = COA
lib.field_smb {
  10 = TEXT
  10 {
    typolink.parameter.data = getIndpEnv:REQUEST_URI
    typolink.returnLast = url
    wrap (
    <li class="google">
    <div class="g-plusone" data-size="medium" data-href="{$baseURL}|"></div>
    <script type="text/javascript">
      (function() {
        var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
        po.src = 'https://apis.google.com/js/plusone.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
      })();
    </script>
    </li>
    )
  }
  20 = TEXT
  20 {
    typolink.parameter.data = getIndpEnv:REQUEST_URI
    typolink.returnLast = url
    wrap (
    <li class="twitter"><a href="https://twitter.com/share" class="twitter-share-button" data-url="{$baseURL}|" data-size="medium">Tweet</a>
    <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
    </li>
  )
  }
  30 = TEXT
  30 {
    typolink.parameter.data = getIndpEnv:REQUEST_URI
    typolink.returnLast = url
    wrap (
    <li class="facebook"><div class="fb-like" data-href="{$baseURL}|" data-send="false" data-layout="button_count" data-width="450" data-show-faces="false"></div>
    <div id="fb-root"></div>
    <script>(function(d, s, id) {
      var js, fjs = d.getElementsByTagName(s)[0];
      if (d.getElementById(id)) return;
      js = d.createElement(s); js.id = id;
      js.src = "//connect.facebook.net/de_DE/all.js#xfbml=1&appId=459667507386498";
      fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));</script>
    </li>
    )
  }
 wrap = <ul class="smb">|</ul> 
}

Viel Spaß damit 😉

Typo3 mit Flashbanner + vererbung | Unterseiten aber nur Bild (tt_content)

Hallo liebe Freunde,
wenn man in Typo3 doch mal Flash verwenden will, gibt es eine tolle EXT: Flash Player Integration (SWF Object)

Wenn man nun den Banner auch noch auf die Unterseiten vererben möchte (beispielhafte Einstellung im TS von TemplaVoila-Mapping):

20 = CONTENT
20 {
source.current = 1

## by marc
table = tt_content
select {
select.pidInList.if.isTrue.field=tt_content
selectFields = tt_content.*
where = tt_content.colPos=3
groupBy = tt_content.uid
leftjoin = pages ON(pages.uid = tt_content.pid) AND INSTR(pages.tx_templavoila_flex, CONCAT(‘index=”vDEF”>’, tt_content.uid))>0
}
## by marc – end

stdWrap.required = 1
stdWrap.dataWrap =

|

 


slide = -1
}

 

[…] Sollte man das Plugin nicht direkt einbinden, sondern per Typoscript.
Damit hat man direkt auch die Möglichkeit alle Paramater übergeben und wenn der Kunde doch mal auf den Unterseiten doch nur noch ein Bild zu sehen ist statt immer die gleiche Animation, ist es durch ein paar Teilen mehr (siehe PIDinRootline) das auch alles kein Thema mehr 😉

flash.produkt < plugin.tx_yejjswfobject_pi1 flash.produkt { flash_record { flashmovie = fileadmin//user_upload/xxxx/xxxx/banner.swf width = 980 height = 320 requiredversion = 8 alternativecontent = 3700 } ts_content { flashParams ( wmode|transparent loop|false ) } } [PIDinRootline = 215,250,238,435,240,241] flash.produkt = RECORDS flash.produkt.tables = tt_content flash.produkt.source = 3700 [end] [/code]

 

Fazit: Die Art etwas mit Typoscript einzubinden ist zwar im ersten Moment nervig und etwas aufwändig, aber kann bei einer großen Webseite das Leben echt leicht machen. Bei mir würde es in dem Fall von 8 Flashbanner und 500 Unterseiten ca. 2 Stunden Arbeit ersparen.

Ich wünsche euch viel Spaß damit und tolle Internseiten 😉
Grüße, euer Marc

Typo3 lästiges (Kopie 1) verhindern

Hallo zusammen,
wer kennt das nicht, wenn man ein tt_content object ohne Headline Kopiert, dann bekommt man immer so eine “(Kopie 1)” und so weiter angezeigt.
Wenn man das aber nicht mehr möchte, kann man sich einer kleinen Einstellung im System zu gunsten machen 😉

TCEMAIN.table.tt_content.disablePrependAtCopy = 1

Diese Zeile kann einfach in das Feld TSConfig (Seiteneigenschaften -> Optionen) eingefügt werden. Durch die rekursive Anwendung kann damit der Zusatz auf nur einer einzelnen Seite oder einem ganzen Seitenbaum angewendet werden

L10N-Manager gibt “Content-Encoding Fehler” aus.

Hallo zusammen,
ich wollte gerne mit dem L10N-Manager meine Typo3-Wesite übersetzen, jedoch bekomme ich immer nur den “Content-Encoding Fehler” beim benutzen dieses Modules.

Nach ein paar Nachforschungen, habe ich herausgefunden das es sich dabei um ein kleinen Bug bei dem [“BE”][“compressionLevel”] Parametern handelt. Also wenn man dieses Plugin mit dem Zusammenhang mit dem CompressionsLevel 1-9 verwendet, bekommt man diese Fehlermeldung.

Wenn man aber in der Localconf.php eine kleine Anpassung macht, kann man das Plugin verwenden.

// deaktivierung der BE-Compression mit GZIP
$TYPO3_CONF_VARS["BE"]["compressionLevel"] = '0';

Liebe Grüße
Marc

TYPO3 – WT Directory RealURL

Mit dem kleinen Code unter euren postVars macht ihr WT Directory SEO-Freundlich.

..
..
        'postVarSets' => array (
            '_DEFAULT' => array (

// WT Directory
              'index' => array(
                  array(
                      'GETvar' => '',
                  ),
              ),
      		'info' => array(
                  array(
                      'GETvar' => 'tx_wtdirectory_pi1[show]',
                                'lookUpTable' => array (
                                        'table' => 'tt_address',
                                        'id_field' => 'uid',
                                        'alias_field' => 'name',
                                        'addWhereClause' => ' AND NOT deleted',
                                        'useUniqueCache' => 1,
                                        'useUniqueCache_conf' => array (
                                                'strtolower' => 1,
                                                'spaceCharacter' => '_',
                                                ),
					),
                  ),
                  array(
                      'GETvar' => 'tx_wtdirectory_pi1[catfilter]',
                  ),
                  array(
                      'GETvar' => 'tx_wtdirectory_pi1[filter][name]',
                  ),
              ),
	'a-z' => array(
		array(
			'GETvar' => 'tx_wtdirectory_pi1[filter][last_name]',
			'valueMap' => array(
				'a'=>'a%',
				'b'=>'b%',
				'c'=>'c%',
				'd'=>'d%',
				'e'=>'e%',
				'f'=>'f%',
				'g'=>'g%',
				'h'=>'h%',
				'i'=>'i%',
				'j'=>'j%',
				'k'=>'k%',
				'l'=>'l%',
				'm'=>'m%',
				'n'=>'n%',
				'o'=>'o%',
				'p'=>'p%',
				'q'=>'q%',
				'r'=>'r%',
				's'=>'s%',
				't'=>'t%',
				'u'=>'u%',
				'v'=>'v%',
				'w'=>'w%',
				'x'=>'x%',
				'y'=>'y%',
				'z'=>'z%',
			),
		),
		array(
			'GETvar' => 'tx_wtdirectory_pi1[pointer]',
		),
	),
// WT Directory : END
     ),
),
..
..

#updatet: 04-07-2011

TYPO3 – CAL – Timeline | Today – +6 Monate dynamisch

Wie versprochen, zeige ich euch hier eine Timeline, die ich mit mit Calender Base erstellt habe.
Ich habe mir viele Gedanken darüber gemacht, wie man das ausschließlich mit Typoscript und ein bisschen jQuery machen kann. Allerdings ist die Geschichte mit dem Calender Base doch etwas komplexer als vielleicht anfangs gedacht. Doch mit etwas Zeit und Ehrgeiz ist auch das eine Hürde, die man nehmen kann ohne komplett zu verzweifeln.

Der Aufbau für dieses kleine Modul besteht aus TypoScript, jQuery und CSS.
Genutzt werden zudem die Extensions: cal (Calender Base) und tscobj* (Content Element From TypoScript)
*optional oder direkt mit TemplaVoila oder in einen Marker.

 

Der TypoScript-Aufbau:

/* Aufbau der CAL’s (6x) + jeweils den Monat
// zum individuellen bearbeiten für jeden CAL
************************************/
lib.month1 < plugin.tx_cal_controller lib.month1 { view { useGetdate = 1 useCustomEndtime = 1 allowedViews = list list.starttime = today #list.starttime = cal:monthstart list.endtime = cal:monthend event.eventViewPid = 75 } } lib.month2 < plugin.tx_cal_controller lib.month2 { view { useGetdate = 1 useCustomEndtime = 1 allowedViews = list list.starttime = cal:monthstart +1 month list.endtime = cal:monthend +1 month event.eventViewPid = 75 } } lib.month3 < plugin.tx_cal_controller lib.month3 { view { useGetdate = 1 useCustomEndtime = 1 allowedViews = list list.starttime = cal:monthstart +2 month list.endtime = cal:monthend +2 month event.eventViewPid = 75 } } lib.month4 < plugin.tx_cal_controller lib.month4 { view { useGetdate = 1 useCustomEndtime = 1 allowedViews = list list.starttime = cal:monthstart +3 month list.endtime = cal:monthend +3 month event.eventViewPid = 75 } } lib.month5 < plugin.tx_cal_controller lib.month5 { view { useGetdate = 1 useCustomEndtime = 1 allowedViews = list list.starttime = cal:monthstart +4 month list.endtime = cal:monthend +4 month event.eventViewPid = 75 } } lib.month6 < plugin.tx_cal_controller lib.month6 { view { useGetdate = 1 useCustomEndtime = 1 allowedViews = list list.starttime = cal:monthstart +5 month list.endtime = cal:monthend +5 month event.eventViewPid = 75 } } /* Generierung der Timeline mit Wraps // Es kann auch anders aufgebaut werden, jedoch // sollten die Class-Names beibehalten werden. ************************************/ lib.eventList = COA lib.eventList { 10 = TEXT 10 { wrap =

|

}

11 = COA
11.1< lib.month1 11.wrap =

|

21 = COA
21.1

|

31 = COA
31.1

|