Runterladen kann man das ganze hier:
http://typo3.org/extensions/repository/view/nh_tvdragndrop/current/
Bugs, Feature requests und Supportanfragen können auf forge.typo3.org gepostet werden:
http://forge.typo3.org/projects/show/extension-nh_tvdragndrop
Zur Errinnerung nochmal das Demo Video:
http://www.youtube.com/watch?v=Fk2KefoNAzk
– [english] –
Today i released the most recent version (0.0.10). of nh_tvdragndrop to TER. The javscript part has undergone a complete refactoring and a seperate ajax responder as been added in order to improve overall response times.
Download:
http://typo3.org/extensions/repository/view/nh_tvdragndrop/current/
Please submit feature requests, bug reporst and support queries to:
http://forge.typo3.org/projects/show/extension-nh_tvdragndrop
Onkel Georg (aka just2b) hat ein nettes Projekt an den Start gebracht: typo3worldmap.net .
Auf der Karte können sich TYPO3 User aus der ganze Welt mit ein paar Klicks eintragen und damit der ganze Welt ihren Standort verraten.
Bisher haben das fast 600 User getan.
Für die Site werden noch Übersetzungen benötigt. Wer also mehr als der Deutschen oder Englischen Sprache mächtig ist, der kann sich die zu übersetzenden Begriffe hier: http://www.typo3worldmap.net/typo3conf/ext/rggooglemapfe/pi1/locallang.xml anschaun und übersetzen. Bei Bedarf bereite ich die gern “Non Techy” – konform auf. Bei Interesse einfach melden. Als Belohnung gibts n dickes Danke und wenn gewünscht einen Link auf der typo3worldmap.net Site.
Das Ding bekommt sogar noch Statistikfunktion verpasst:
I. Teaser listen (z.B. tt_news)
Beim Einsatz von TT_NEWS ist es anzuraten, das indexing fuer “LIST”, “LATEST” und “ARCMENU” Seiten zu deaktiveren. Oder zumindest im Template mittels TYPO3SEARCH_begin/end für das Plugin auszustellen.
Hintergrund: Es kann durchaus passieren, das ein Artikel in mehreren Listen und im Archiv auftaucht. Es ist für den Suchenden in der Regel aber nicht die Platzierung innerhalb einer Liste interessant sondern nur der Detail Artikel ansich.
Darüber hinaus führt die Mitindizierung der Listen zu sehr grossen “index_rel” Tabellen – so gross, das dadurch bspw. ein SQL DMUP BACKUP nicht mehr ohne weiters möglich ist oder eine Suchanfrage sehr, sehr lang dauert.
Am einfachsten ist es daher die Indizierung fuer die gesamt Seite abzustellen. Es sei denn auf der Seite befinden sich Suchrelevante information, was allerdings in der Regel nicht der Fall ist.
Das gleiche gilt fuer Seiten die zum grossteil aus Teaser bestehen. Auch diese sind für denjenigen, der über die Suche kommt nicht interessant, denn das interesse gilt, wenn dann dem “Angeteaserten/r Artikel/Seite”.
Selbstverständlich gilt dies auch für andere Extensions, die ähnnlich funktionieren.
II. TT_NEWS Backpid
IstIst ein Artikel in mehren Kategorien, so kann es sein, das dieser über 2 oder unterschiedliche Deeplinks (backpids) erreichbar ist. bspw:
http://mydomain.org/detail/article/9/kleine-ente.html
http://mydomain.org/detail/article/120/kleine-ente.html
http://mydomain.org/detail/article/28/kleine-ente.html
Backpids sind hier 9,120,28.
Das sind die jeweiligen Rücksprungseiten, die zur Generierung des “zurück zu xyz” Links auf der Detailseite benötig werden. Für die Suchmaschine sind dies allerdings 3 verschiedene Seiten. Womit auch 3 Treffer in der Suche angezeigt werden.
Eine saubere Lösung mit Bordmitteln gibt es hierfuer leider nicht wirklich. Eine Möglichkeit ist das Abstellen der “BACKPID” via Typoscript und das Ersetzen des “zurück” Links durch einen JAVASCRIPT <history back>-Link oder die Option sich per TypoScript die letzte Seite zu merken (bspw. via LOAD_REGISTER) und den Link mittels eines Hooks zu generieren und einen entsprechenden Marker zu platzieren.
III. Suchwoerter
Die Indexed search Suche, logged eingegeben Suchworte. Mir ist aufgefallen, das viele Begriffe auf Grund von Fehlkombination, Dummheit oder Rechtschreibschwäche zu keinem oder zu zuvielen Ergebnissen führen obwohl adequater Inhalt vorhanden ist. Auch hier besteht deutliches Optimierungspotential und natürlich die Möglichkeit den Besucher länger auf der Seite zu halten.
Bspw.: Durch Analyse der Suchphrasen und entsprechender “Verkeywortung” der Inhalte. Dazu ist allerdings eine reglässige Prüfung der entsprechenden Tabellen notwendig.
Weitere Hinweise zu dem Thema finden sich u.A. hier :
http://www.oliver-thiele.de/cms-typo3/tutorials/indexsuche-optimieren.html
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | $TYPO3_CONF_VARS['EXTCONF']['realurl'] = array( '_DEFAULT' => array( 'init' => array( 'enableCHashCache' => 1, 'appendMissingSlash' => 'ifNotFile', 'enableUrlDecodeCache' => 1, 'enableUrlEncodeCache' => 1 ), 'pagePath' => array( 'type' => 'user', 'userFunc' => 'EXT:realurl/class.tx_realurl_advanced.php:&tx_realurl_advanced->main', 'spaceCharacter' => '-', 'languageGetVar' => 'L', 'expireDays' => 3, 'rootpage_id' => 3 ), 'fileName' => array ( 'defaultToHTMLsuffixOnPrev'=> 1 ), 'postVarSets' => array( '_DEFAULT' => array( 'browse' => array( array( 'GETvar' => 'tx_ttnews[pointer]' ) ), 'select_category' => array ( array( 'GETvar' => 'tx_ttnews[cat]' ) ), 'article' => array( array( 'GETvar' => 'tx_ttnews[tt_news]', 'lookUpTable' => array( 'table' => 'tt_news', 'id_field' => 'uid', 'alias_field' => 'title', 'addWhereClause' => ' AND NOT deleted', 'useUniqueCache' => 1, 'useUniqueCache_conf' => array( 'strtolower' => 1, 'spaceCharacter' => '-' ), ), ), array( 'GETvar' => 'tx_ttnews[backPid]' ), array( 'GETvar' => 'tx_ttnews[swords]' ) ) ) ) ) ); |
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | my_ajax_service = PAGE my_ajax_service { // Beliebige Typen Nummer typeNum = 4711 config { //Keinen Header, Keinen Body, kein Admin Panel disableAllHeaderCode = 1 xhtml_cleaning = 0 admPanel = 0 } // INT, da nicht gecached werden soll. 10 = COA_INT 10 { 10 = CONTENT 10 { table=tt_news select { selectFields = tt_news.uid,tt_news.title,single_pid // Wichtig die PID auf der die News liegen pidInList = 41 // Wir wollen ja latest orderBy = tt_news.tstamp DESC // jeweils nur den letzten. Und auch nur einen. max = 1 //Die Categorie Relation wird gejoind andWhere = uid_foreign= //und zwar anhand der GET Variablen catuid andWhere.dataWrap = |{GPvar:catuid} join = tt_news_cat_mm ON (tt_news.uid=tt_news_cat_mm.uid_local) JOIN tt_news_cat ON (tt_news_cat.uid=tt_news_cat_mm.uid_foreign) } //nun zur Darstellung renderObj.10 = TEXT renderObj.10.wrap = <h2>|</h2> renderObj.10.field = title renderObj.10.typolink { parameter.data = {field:single_pid} additionalParams = &tx_ttnews[tt_news]={field:uid} &tx_ttnews[backPid]={TSFE:id} additionalParams.stdWrap.insertData = 1 useCacheHash=1 } } } } |
Soweit so gut. Einen Hacken hat die Sache allerdings noch. Das ganze ist weder besonders gefeit gegen SQL injection noch fängt es fehlerhafte Parameter ab. Dem kann Abhilfe geschaffen werden:
15 16 17 18 19 | 10 = CONTENT 10 { if.isTrue.prioriCalc = intVal if.isTrue.data = GPvar:catuid ... |
Damit wird der CONTENT Block nur gerendert, wenn catuid gesetzt, nummerisch und grösser als Null ist.
Fein wäre jetzt auch noch eine Fehlermeldung, falls catuid ungültig ist. Auch das ist kein Problem:
57 58 59 60 61 62 | 20 = TEXT 20.value = FEHLER 20.if.isFalse.prioriCalc = intVal 20.if.isFalse.data = GPvar:catuid } } |
Damit wird dem COA ein weiter Block hinzugefügt, der nur angezeigt wird, wenn catuid ungültig ist.
Das Beispiel, speziel die Darstellung ist extrem simple gehalten. Natürlich lässt sich das beliebig erweitern. In diesem Fall wird einfach nur die Überschrift der entsprechenden News mit der auf der Kategorie hinterlegten Detailseite verlinkt.
Nun bedarf es nur noch des Passende JS codes um das betreffenden DIV auf ein Event hin upzudaten.
In jQuery sieht sowas dann so aus:
1 | $('#my_div').load('index.php', {type : '4711', catuid:xx}); |
In Prototype etwa so
1 2 3 | new Ajax.Updater('my_div', '/index.php', { parameters: { type : '4711', catuid:xx} }); |
“xx” muss natürlich durch die entsprechende Kategorie UID ersetz werden. Sinnvoller weise kapselt man das ganze noch in eine parameterisierbare Funktion und hängt es an ein Event (z.b. change von ner Selectbox oder click von nem Link)
Voila