better tag cluod - index_search Ergebnisse verbessern

  • typo3_hp typo3_hp
    Jedi-Meister
    0 x
    390 Beiträge
    0 Hilfreiche Beiträge
    19. 04. 2012, 19:06

    Hallo!

    Ich nutze unten angehängtes TS um meine Tag-Cloud mit den am meisten gesuchten Suchbegriffen zu füllen.

    Was mich dabei stört, ist dass auch SUchergebnisse angezeigt werden welche gar keine Ergebnisse gebracht haben (solche auszuwerten mag zwar sinnvoll sein, kann aber dann über die DB erfolgen).

    Ich habe nun herausgefunden, dass in der Tabelle "index_stat_word" wo ich ja aktuell das "word" auswerte, auch ein referenzieller Verweis auf die Tabelle "index_stat_search" steht.
    In der Tabelle "index_stat_search" gibt es das Feld "hits" (Anzahl der gefundenen Begriffe).

    Kann ich per TS eine Verbindung mit meinem TS unten hinbekommen, dass nur die Wörter ausgewertet werden, welche auch mind. 1 Sucherergebnis liefern?

    TS:

    1. plugin.tx_vgetagcloud_pi1 {
    2. pageID = 28
    3. startPage.data = 1
    4. referenceTable = index_stat_word
    5. referenceFields = word
    6. maxWords = 30
    7. exclude.tt_content.CType = mailform
    8. exclude.tt_content.list_type = vge_tagcloud_pi2
    9. exclude.tt_content.menu_type =
    10. exclude.pages.doktype = 98,100,199,254,255
    11. minWeight = 90
    12. maxWeight = 200
    13. splitChar = ,
    14. tagWrap {
    15. additionalParams >
    16. additionalParams.field = tag_keyword
    17. additionalParams.rawUrlEncode = 1
    18. additionalParams.wrap = &tx_indexedsearch[sword]=|
    19. useCashHache = 1
    20. }
    21. }
    22.  
    23. }

    Danke, hoffe das geht irgendwie. Dann wäre das ganze echt super!


  • 1
  • LuP LuP
    Jedi-Meister
    0 x
    496 Beiträge
    1 Hilfreiche Beiträge
    19. 04. 2012, 22:15

    Hallo,

    Ich würde es mit einem JOIN machen. Allerdings wäre dann ein zusätzliches if-Konstrukt in pi1 vonnöten.
    Ungefähr so:

    1. $allKeywords = array_merge($allKeywords, $this->getKeywords($result, $values['table'], $values['fields']));
    2. }
    3. }
    4. // BEGIN
    5. elseif ((bool)$this->conf['referencesIndexSearch']) { // joined indexed_search reference tables
    6.  
    7. $tableA = 'index_stat_word';
    8. $tableB = 'index_stat_search';
    9. $selectFields = $tableA . '.word';
    10. $tableAB = $tableA . ' JOIN ' . $tableB . ' ON ' . $tableA . '.word=' . $tableB . '.searchstring';
    11. $whereClause = '1=1';
    12. $whereClause .= ' AND ' . $tableB . '.hits >0';
    13. $result = $GLOBALS['TYPO3_DB']->exec_SELECTquery($selectFields, $tableAB, $whereClause);
    14. $allKeywords = $this->getKeywords($result, $tableA, 'word');
    15. }
    16. // END
    17. else { // Single reference table

    1. plugin.tx_vgetagcloud_pi1 {
    2. pageID = 28
    3. referencesIndexSearch = 1
    4. maxWords = 30
    5. minWeight = 90
    6. maxWeight = 200
    7. splitChar = ,
    8. tagWrap {
    9. additionalParams >
    10. additionalParams.field = tag_keyword
    11. additionalParams.rawUrlEncode = 1
    12. additionalParams.wrap = &tx_indexedsearch[sword]=|
    13. useCashHache = 1
    14. }
    15. }
    16. }

    Ungetestet und keine Gewähr für die Richtigkeit.

    VG,
    LuP

  • typo3_hp typo3_hp
    Jedi-Meister
    0 x
    390 Beiträge
    0 Hilfreiche Beiträge
    20. 04. 2012, 14:47

    Hallo LuP!

    Danke!

    Habe eine elegantere Lösung gefunden!

    1. addWhere = word in (select distinct searchstring from index_stat_search where hits > 0)

    Grüße und DANKE!

  • 1