Servus parallaxis,
könntest Du Deinen Lösungsweg hier vielleicht nochmal etwas genauer aufschreiben? Ich sitze demnächst vor demselben Problem und ein praktisches Beispiel mit den Hooks für die Suche von tt_news würde mir ungemein helfen... mir und bestimmt ganz vielen anderen auch 😉 .
Beste Grüße!
Hi!
Leider habe ich nicht die Zeit das ganze mal "vernünftig" zu Coden und als Extension bereit zu stellen.
Sorry!
Aber im Grunde steht in den codes oben, wie man die Hooks nutzt, die funktionen die dann aufgerufen werden, hängen dann ja eh vom speziellen Fall ab.
parallaxis schrieb
Hi!
Leider habe ich nicht die Zeit das ganze mal "vernünftig" zu Coden und als Extension bereit zu stellen.
Sorry!
Aber im Grunde steht in den codes oben, wie man die Hooks nutzt, die funktionen die dann aufgerufen werden, hängen dann ja eh vom speziellen Fall ab.
Ja parallaxis,
das wäre für mich persönlich auch ganz essentiell, der Lösungsweg.
Ich sitze seit einer Woche an dem Problem und komme nicht weiter.
Google hat auch schon die Nase voll von meinen Suchanfragen... #angry#
Bitte poste doch mal deine "class.user_ttsearch_pi1.php".
Bitte Bitte Bitte. o.O
Danke im Voraus
André
Was genau ist denn dein Problem?
Was die Hooks machen steht in der tt_news-Doku.
Wie man die Hooks nutz erkläre ich oben, sogar mit dem entsprechen Code.
parallaxis schrieb
Was genau ist denn dein Problem?
Ich habs verstanden wie Hooks eingesetzt werden, jetzt hab ich keine Ahnung was ich in meine Funktion schreiben soll,
wenn ich ein weiteres Suchfeld mit den tt_news-Kategorien haben will.
Mein bisheriger Ansatz:
ext_localconf.php meiner Extension:
<?php
if (!defined ("TYPO3_MODE")) die ("Access denied.");
require_once(t3lib_extMgm::extPath('sp_reise_ttnews').'class.tx_spreisettnews.php');
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['tt_news']['additionalFormSearchFields'][] = 'tx_spreisettnews';
?>
class.tx_spreisettnews.php:
<?php
class tx_spreisettnews {
function additionalFormSearchFields($parentObj, $searchMarkers) {
// select über alle tt_news_cat... und in eine option-list bauen
...
$markerArray['###SCATEGORY###'] = ???
}
}
?>
In meinem tt_news-Template hab ich einen entspr. Marker ###SCATEGORY### der jetzt durch meine Funktion ersetzt werden müsste.
Nur ich weiß nicht wie?!
Hook to add fields to search form in function displayList() (additionalFormSearchFields)
Hook to post-process search condition in function searchWhere() (searchWhere)
Also für die SQL-Anfragen ist ein anderer Hook zuständig:
searchWhere
Wenn ich dein Problem richtig verstanden hab, brauchst du den auch.
Ansonsten würd ich dir raten die entsprechenden aufrufe der Hooks in tt_news genauer anzuschauen.
Das 'searchWhere' ist erst im 2. Schritt dran.
Ich muss doch erstmal mit dem 1. Hook das neue Suchfeld reinbekommen.
Nur welchen Code muss in meine Funktion, der mir die Kategorie-Selectbox zaubert?
Ich glaub du stehst aufm schlauch. 😉
Ist ganz einfach:
Du schreibst dir entweder eine Funktion die alle Kategorien aus der Datenbank ausliest und dir den HTML-Source für eine Selectbox ausgibt.
Welchen du dann in den Marker schreibst.
function additionalFormSearchFields($this, $searchMarkers) {
$searchMarkers['###SCATEGORY###']= *php funktion*
return $searchMarkers;
}
Oder du haust die Selectbox von Hand ins tt_news-search-template.
<!-- ###TEMPLATE_SEARCH### begin
Subpart for the search-form
-->
Mir gehts konkret um die magische "php funktion", aber ich werds schon irgendwie hinbekommen...
Dachte nur, weil du auch die Kategorien als Selectbox brauchtest und es hinbekommen hast,
dass du genau DIESE PAAR ZEILEN PHP postest, aber egal.
Ich probiers selber...
Nö, sowas hab ich gar nicht gemacht.
Deswegen kann ichs auch nicht posten.
So, das Formular schaut gut aus :-)
Jetzt hab ich noch den searchWhere-Hook:
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['tt_news']['additionalFormSearchFields'][] = 'tx_spreisettnews';
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['tt_news']['searchWhere'][]='tx_spreisettnews';
meine Funktion in der Klasse:
function searchWhere($this, $sw, $where) {
...
$where .= " AND datetime > UNIX_TIMESTAMP('2009-01-01')";
return $where;
}
Problem: keine Auswirkung auf das Suchergebnis, keine Fehlermeldung.
Egal was ich in die $where reinschreib, es scheint nicht beachtet zu werden.
Was hast du drin steht parallaxis?
parallaxis schrieb
Ok... das war blöd... #angry#
Die searchWhere wird nur aufgerufen, wenn ein Suchbegriff eingegeben wird.
Ich hatte einfach keinen Suchbegriff eingegeben... #paralyzed#
Tatsache!
Erst wenn ein Suchbegriff mit angegeben wird kommt die searchWhere ins Spiel.
Ich hab das ganze mit einem hidden-parameter im Formular gelöst:
<input class="csc-mailform-submit" type="hidden" name="tx_ttnews[search]" value="1" />
und in der class.tx_ttnews.php die if-Abfrage erweitert:
if ($this->piVars['swords'] || $this->piVars['search'])
Hi !
Ich bin Französisch und ich ferstehe nicht sehr güt was du erklären.
Ich bin neu bei typo3 une ich verstehe nicht Hooks. Ich versuche, deinem Beispiel zu verstehen, aber est ist nicht klar... Können Sie mich ihre Dateien zeigen ?
Oder können Sie eine Erklärung in englischer Sprache geben?
Niemand fur mir zu helfen ?
Ich habe immer noch Probleme mit hooks...
Danke !
welche art von extension muss ich denn im kickstarter anlegen, um einen searchwhere hook zu definieren? ein frontend plugin?
es wäre echt super, wenn jemand den kompletten code für ein ganz simples searchwhere beispiel posten könnte. 🙂
edit:
funktioniert! 🙂
hab einfach ein frontend plugin angelegt und in der klasse die searchWhere function hinzugefügt. dann noch in ext_localconf.php registriert. soll ich die main function entfernen? wird die überhaupt aufgerufen?
vielleicht habe ich später noch eine frage zu additionalFormSearchFields...
muss ich bei meinen where ergänzungen irgendwas escapen um sql injections zu verhindern, oder wird das eh alles irgendwo nachher nochmal überprüft?
franz ferdinand schrieb
edit:
funktioniert! 🙂
Hallo Ich habe ein komsiches Problem: Habe einen Hook der Funktioniert aber er überschreibt mir die Markers von tt_news. z.B. mein Marker ###GENERIC_CAT### wird mit "hallo" testmassig richtig ausgegeben aber die marker von tt_news z.B. ###FORM_URL### wird als "###FORM_URL###" natürlich falsch ausgegeben.
Irgendwas muss mit meiner Funktion nicht stimmen....
function additionalFormSearchFields($searchMarkers) {
$searchMarkers = array(
'###GENERIC_CAT###' => 'hallo');
return $searchMarkers;
}
Aber was?
Danke sehr
Hallo,
ich habe es durch diesen Thread schon mal geschafft einen Hook anzulegen, das Suchformular anzupassen und auch auch den Searchstring zu modifizieren.
Aber wie bekomme ich jetzt die Eingabe aus einem eigenen Feld in die searchWhere Funktion.
Ich habe ein weiteres Suchfeld:
<input type="text" name="tx_ttnews[searchdate]" id="date" value="###DATE###" class="datepicker">
aber wie kann ich dieses Suchfeld nun auslesen?
function searchWhere($parentObj, $sw, $where) {
$where .= " AND datetime > UNIX_TIMESTAMP(".$this->piVars['searchdate']. " ) " ;
return $where;
}