Suche in News auf Zeitraum beschränken - von/bis

  • schlonz schlonz
    Padawan
    0 x
    31 Beiträge
    0 Hilfreiche Beiträge
    10. 12. 2008, 20:34

    Hallo,
    ich möchte das Suchmodul für die News so konfigurieren, dass ich über ein Input Feld den Inhalt durchsuchen und gleichzeitig einschränken kann das nur die News von z.B. 1. Juni bis 1. August durchsucht werden.

    Eine Umsetzung habe ich hier gesehen:

    [url]http://www.typo3-hochschule.de/news/suche-in-news-typo3-hochschule.html[/url]

    Genau das ist es - Wie geht das?

    Gruß


  • 1
  • FotoHorst FotoHorst
    R2-D2
    0 x
    68 Beiträge
    0 Hilfreiche Beiträge
    13. 12. 2008, 17:54

    Ich möchte das auch unbedingt wissen.

    Eigene Recherchen ergaben jedenfalls keine Lösung über ein Plugin.

    Ich denke es zielt auf das Erstellen von s.g. "Hooks" hin.

    Nu bräuchte man nur mal ein konkretes funktionierendes Beispiel. Vielleicht würde man dann weiterkommen.

    :o

  • schlonz schlonz
    Padawan
    0 x
    31 Beiträge
    0 Hilfreiche Beiträge
    13. 12. 2008, 21:59

    Gerade noch einmal die von Lightwerk programmierte Suche getestet - sieht schick aus, aber funktioniert nicht.

  • 0 x
    102 Beiträge
    0 Hilfreiche Beiträge
    15. 12. 2008, 08:58

    Hi!

    Also als Quick n' Dirty Lösung, mußt du einfach die searchWhere() von tt_news erweitern.
    Das hab ich so gemacht und funktioniert auch.
    Aber es ist eigentlich gar nicht "Quick", dafür aber sehr "Dirty"! :o
    Wenn du das machst kannst du tt_news natürlich nicht mehr einfach so updaten ohne die Funktion nach jedem Update neu reinschreiben zu müßen.

    Ich selbst bin gerade auf der [url=http://www.typo3.net/forum/list/list_post//84841/]Suche[/url] nach einer Beschreibung wie man mit den Hooks für die Suche umgeht. Leider war Google bisher nicht mein Freund... :'(

  • 0 x
    102 Beiträge
    0 Hilfreiche Beiträge
    15. 12. 2008, 10:05

    Ok, ich poste mal meine "DIRTY" Lösung:
    [b]WICHTIG! Ich habe das ganze mit der Version 2.5.0 von tt_news gemacht. Mir ist vorhin aufgefallen, das die aktuelle Version etwas anders ist![/b]

    Zuerst habe ich im tt_news Template die 3 Dropdown-boxen "stag", "smonat" & "sjahr" hinzugefügt:

    1. <select name="tx_ttnews[sjahr]" id="Jahr">
    2. <option selected="selected">###SYEAR###</option>
    3. <option></option>
    4. <option>2006</option>
    5. <option>2007</option>
    6. <option>2008</option>
    7. </select>

    Dafür kann man natürlich auch ein Eingabefeld nutzen und oder das ganze per Script so machen, das die Datumsangaben stimmen, aber das war mir zu umständlich. 8-)

    Als nächstes bin ich an die class.tx_ttnews.php gegangen.
    Ich muss allerdings sagen, das ich ne ältere Version tt_news am laufen habe:
    * $Id: class.tx_ttnews.php 5071 2007-02-27 23:16:44Z rupertgermann $

    Dort steht in Zeile 683 sowas:

    case 'SEARCH':

    1. <?
    2. case 'SEARCH':
    3. $prefix_display = 'displayList';
    4. $templateName = 'TEMPLATE_LIST';
    5.  
    6. $formURL = $this->pi_linkTP_keepPIvars_url(array('pointer' => null, 'cat' => null), 0, 1, $this->config['searchPid']) ;
    7. // Get search subpart
    8. $t['search'] = $this->getNewsSubpart($this->templateCode, $this->spMarker('###TEMPLATE_SEARCH###'));
    9. // Substitute markers for the searchform
    10. $out = $t['search'];
    11.  
    12. $out = $this->cObj->substituteMarker($out, '###FORM_URL###', $formURL);
    13. $out = $this->cObj->substituteMarker($out, '###SDAY###', htmlspecialchars($this->piVars['stag']));
    14. $out = $this->cObj->substituteMarker($out, '###SMONTH###', htmlspecialchars($this->piVars['smonat']));
    15. $out = $this->cObj->substituteMarker($out, '###SYEAR###', htmlspecialchars($this->piVars['sjahr']));
    16. $out = $this->cObj->substituteMarker($out, '###SWORDS###', htmlspecialchars($this->piVars['swords']));
    17. $out = $this->cObj->substituteMarker($out, '###SEARCH_BUTTON###', $this->pi_getLL('searchButtonLabel'));
    18. // Add to content
    19. $content .= $out;
    20. // do the search and add the result to the $where string
    21. if (($this->piVars['swords']) || ($this->piVars['sjahr'])) {
    22.  
    23. $suchefeld = 'tstamp';
    24. $suchtabelle = 'tt_news';
    25.  
    26. //Auslesen der Suchparameter
    27. $suchtag = intval($this->piVars['stag']);
    28. $suchmonat = intval($this->piVars['smonat']);
    29. $suchjahr = intval($this->piVars['sjahr']);
    30.  
    31. //Ermitteln der Timestamps für ersten und letzten Tag eines Monats und Jahres
    32. $precisedaystart = mktime(0, 0, 0, $suchmonat, $suchtag, $suchjahr);
    33. $precisedaystop = mktime(23, 59, 59, $suchmonat, $suchtag, $suchjahr);
    34. $firstdaymonth = mktime(0, 0, 0, $suchmonat, 1, $suchjahr);
    35. $lastdaymonth = mktime(0, 0, 0, $suchmonat+1, 0, $suchjahr);
    36. $firstdayyear = mktime(0, 0, 0, 1, 1, $suchjahr);
    37. $lastdayyear = mktime(0, 0, 0, 1, 0, $suchjahr+1);
    38.  
    39. //Erweiterte Suchfunktion mit Suche nach Timestampts (Aufruf weiter unten)
    40. function searchWhereNEU($sw,$searchFieldList,$searchTable='tt_news',$anfangtimestamp,$endtimestamp) {
    41. global $TYPO3_DB;
    42. $suchwhere = " AND datetime >= $anfangtimestamp AND datetime <= $endtimestamp";
    43. $prefixTableName = $searchTable ? $searchTable.'.' : '';
    44. $where = '';
    45. if ($sw) {
    46. $searchFields = explode(',',$searchFieldList);
    47. $kw = split('[ ,]',$sw);
    48.  
    49. while(list(,$val)=each($kw)) {
    50. $val = trim($val);
    51. $where_p = array();
    52. if (strlen($val)>=2) {
    53. $val = $TYPO3_DB->escapeStrForLike($TYPO3_DB->quoteStr($val,$searchTable),$searchTable);
    54. reset($searchFields);
    55. while(list(,$field)=each($searchFields)) {
    56. $where_p[] = $prefixTableName.$field.' LIKE \'%'.$val.'%\'';
    57. }
    58. }
    59. if (count($where_p)) {
    60. $where.=' AND ('.implode(' OR ',$where_p).')';
    61. }
    62. }
    63. $where.= $suchwhere;
    64. }
    65. return $where;
    66. }
    67. //Prüfen der Sucheparameter, entsprechnde Suche und Ausgabe.
    68. if (!$this->piVars['swords']) {
    69. $suchworte = '*';
    70. }
    71. else {
    72. $suchworte = trim($this->piVars['swords']);
    73. }
    74.  
    75. $suchfelder = $this->searchFieldList;
    76. //Suche nach genauem Tag
    77. if (($suchtag) && ($suchmonat) && ($suchjahr)) {
    78. $where = searchWhereNEU($suchworte,$suchfelder,'tt_news',$precisedaystart,$precisedaystop);
    79. }
    80. //Suche nach allen News in einem Monat
    81. else if (($suchmonat) && ($suchjahr)) {
    82. $where = searchWhereNEU($suchworte,$suchfelder,'tt_news',$firstdaymonth,$lastdaymonth);
    83. }
    84. //Suche in einem bestimmten Jahrs
    85. else if ($suchjahr) {
    86. $where = searchWhereNEU($suchworte,$suchfelder,'tt_news',$firstdayyear,$lastdayyear);
    87. }
    88. else {
    89. $where = $this->searchWhere(trim($this->piVars['swords']));
    90.  
    91. }
    92. $theCode = 'SEARCH';
    93. }
    94.  
    95. else {
    96. $where = ($this->conf['emptySearchAtStart']?'AND 1=0':''); // display an empty list, if 'emptySearchAtStart' is set.
    97. }
    98. break;?>

    So, nun wißt ihr, wieso es Dirty ist. ;)
    Das mußte damals recht fix gegen und es war nur wichtig, das die Funktion funktionierte, nicht wie gut sie Programmiert ist.
    Deswegen suche ich jetzt auch ne Möglichkeit es ordentlich zu machen.

    Falls noch Fragen sind, stellt sie einfach.

  • dwildt dwildt
    T3PO
    0 x
    19 Beiträge
    0 Hilfreiche Beiträge
    12. 12. 2010, 00:42

    Vielleicht ist der Browser - die TYPO3-Frontend-Engine - die passende Lösung. Den Browser gibt es ab Januar 2011 mit Zeitraumsuche (Release 3.6).
    Mehr Infos:
    TYPO3 ermöglicht ab Januar bequeme Zeitraumsuche
    http://t3n.de/socialnews/TYPO3/TYPO3-ermoeglicht-ab-Januar-bequeme-Zeitraumsuche/

    Viele Grüße
    Dirk

  • MisterFW MisterFW
    TYPO3-Anwärter
    0 x
    5 Beiträge
    0 Hilfreiche Beiträge
    09. 09. 2012, 18:38

    Ich hoffe, es ist nicht so schlimm, dass ich diesen Thread wiederbelebe.
    Seid ihr mit einer anständigen Filterung weitergekommen? Ich habe leider das Gefühl, dass der TYPO3- Browser nicht so ganz das richtige ist und meine eigenen Extension, die nichts anderes machen sollte als die Filterung, funktioniert leider auch nur beim ersten Aufruf. Das Problem bei mir ist nämlich, dass der Hook von tt_news, den ich verwende, nicht aufgerufen wird, wenn die Seite einmal im Cache war.
    Entweder, ich cache nichts mehr oder man kann tt_news irgendwie anweisen, die Meldungen als einzelne Elemente zu cachen und daraus dann passend die Ansichten zusammenzustellen - aber ersteres ist zu rechenintensiv (und dauert für den User zu lange) und letzteres kann man meines Wissens nicht einstellen. Oder doch?

    Ich habe auch von einer neuen News- Erweiterung gelesen, die auf Fluid/Extbase basiert. Weiß dazu jemand genaueres?

    Grüße, MisterFW

  • 1