Andere Frage:
Wenn ich einen Import via CSV mache, funktioniert das alles soweit.
Wenn ich nach dem Import in der CSV was ändere und den Import nochmal laufen lasse, ändert sich aber nichts.
In der API-Anbindung ist jeweils ein Haken gesetzt bei "Einträge updaten" und "Neue Einträge anlegen". Arbeitet das anders, als man vielleicht auf den ersten Blick vermutet?
Edit:
Hat sich erübrigt. Funktioniert schon so, wie ich es verstanden habe. Fehler lag woanders.
Ankündigung
Einklappen
Keine Ankündigung bisher.
API: Keine Auswahl bei Hook-Callback-Funktion?
Einklappen
X
-
Jetzt mit Deiner Ergänzung verstehe ich auch was Du gemeint hast. Dankeschön!
Kannst meine letzte Frage zu den Akten legen
Ich arbeite in meinem konkreten Fall nur mit Textfeldern, von daher passt das schon. Aber ich glaube insgesamt habe ich jetzt kapiert, was da läuft.
Einen Kommentar schreiben:
-
Verstehe die Frage nicht. Die Dokumentation beschreibt dir den Weg eines Imports oder Exports. Wie der Wert für das Zielfeld je API Job ermittelt wird, kannst du ja selbst festlegen. Idealerweise Wert 1zu1 übertragen.Zitat von D23 Beitrag anzeigenNachvollziehbar.
Aber wie bekomme ich denn dann die Werte in die Felder?
Mein Hook Beispiel überschreibt den Import-Wert oder Export-Wert mit "Ich bin Funktion 1"
https://premiumcontaothemes.gitbooks...ort/intro.htmlZuletzt geändert von Tim; 09.03.2017, 15:31.
Einen Kommentar schreiben:
-
Nachvollziehbar.
Aber wie bekomme ich denn dann die Werte in die Felder?
Einen Kommentar schreiben:
-
Wenn du mit (string) konvertierst, wird auch ein Array zu einem String. return "Array", auch ein numerischer Wert wird zu einem String. Das ist nicht aussagekräftig.
Meistens kommen da Strings rein. Man sollte immer mit einem Blick in SQL arbeiten. Blobs sind serialisierte Array-Strings.
Das prüft man vorab:
if(is_string($arrData['street']) && is_numeric($arrData['street'])
{
// oh das ist wohl eine Zahl
}
if(is_array(deserialize($arrData['street']))
{
// ich bin ein array
}
Ein php debugger zeigt dir das an.
Der Rückgabewert selbst muss nicht zwingend ein String sein, sondern eher passend zum Feldtyp. Ist "street" ein Textfeld, liegt es nah
Ein Tags-Attribut-Feld erwartet zum Beispiel einen Array. Die API kümmert sich um das SQL Statement.Zuletzt geändert von Tim; 09.03.2017, 15:27.
Einen Kommentar schreiben:
-
Oh Mann... die class hatte gefehlt. Jetzt läuft das. Mal wieder super Hilfe von Dir! Danke vielmals!
Und schon gleich die nächste Noob-Frage:
Kann es sein, dass z.B. $arrData[''feld]; als Wert keinen String zurückgibt?
Wenn ich bspw. das hier in der Funktion stehen habe
wird am Ende des Jobs nichts in das entsprechende Feld eingetragen.PHP-Code:$strStreet = $arrData['street'];
$varReturn = $strStreet;
Wenn ich aber stattdessen das reinschreibe:
funktioniert das ganze.PHP-Code:$strStreet = $arrData['street'];
$varReturn = (string) $strStreet;
Einen Kommentar schreiben:
-
Sowas sollte in der config.php einer eigenen Erweiterung deklariert werden, die nach CC läd (autoload.ini).
Dann benötigst du eine php Klasse "MyApiCallbacks" mit der public function myFunction_1.
Entspricht dem Standard: https://docs.contao.org/books/manual...tao-hooks.html
Nur mit festem Array-Key "myCallback_1"
--
Ich habs mal bei Github eingestellt:
https://github.com/timgatzky/pct_cus...iCallbacks.phpZuletzt geändert von Tim; 09.03.2017, 12:34.
Einen Kommentar schreiben:
-
Öhm, nö...versteh's noch immer nicht.
Das hier kommt doch in die system/config/dcaconfig.php? $GLOBALS['PCT_CUSTOMCATALOG_API']['HOOKS']['myCallback_1'] = array('MyApiCallbacks','myFunction_1');
Und dein PHP Code von eben kommt z.B. in system/modules/zz_assets/classes/ImportTest.php oder seh ich das falsch?
Einen Kommentar schreiben:
-
Nein, dataOutput gibt dir den Array NACH der gesamten Job-Bearbeitung.
Hier bekommst du sogar den jeweiligen Datensatz rein, der gerade abgearbeitet wird.
Der Rückgabewert ist der Wert, der später in deinem dataOutput im jeweiligen Zielfeld landetPHP-Code:/**
* @param mixed Wert aus Quelle
* @param array Aktueller zu bearbeitender Datensatz
* @param object Der API Job
*/
public function myFunction_1($varBefore,$arrData,$objJob)
{
// tabelle
$strTable = $objJob->getTable();
$varReturn = $varBefore;
// überschreibe mich :)
$varReturn = 'Ich bin Funktion 1';
return $varReturn;
}
Einen Kommentar schreiben:
-
Da bin ja froh
So ganz funktioniert's aber noch nicht – ich nehme an, dass mein Aufbau auch falsch ist, nachdem ich mich da an der Doku orientiert habe. Ich dachte, das wäre dann der gleiche Aufbau wie bei dataOutput...
Wo ist der Fehler?
PHP-Code:public function myDataOutputCallback($arrSet, $objApi)
{
if($objApi->getTable() == 'cc_za_members')
{
foreach($arrSet as $i => $data)
{
$dataFirstname = $data['firstname'];
$dataLastname = $data['lastname'];
$dataTitle = preg_replace ('/[^a-z0-9 ]/i', '', $data['title']);
if($dataTitle != '')
{
$data['alias'] = strtolower($dataTitle.'-'.$dataFirstname.'-'.$dataLastname);
}
else
{
$data['alias'] = strtolower($dataFirstname.'-'.$dataLastname);
}
// set data
$arrSet[$i] = $data;
}
}
return $arrSet;
}
Einen Kommentar schreiben:
-
Nein nein. Alles richtig zu fragen.Zitat von D23 Beitrag anzeigenAhhhh... cool...
Hätte ich das irgendwo nachlesen können? In der API Doku hab ich das so nicht gefunden.
. Das ist zur Zeit nur im Code herausfindbar sonst. Das kommt noch in die Doku (dieses Gitbook Zeug ist nur nervig
) - ich schreibs aber noch als Beschreibungstext zum Feld ins Backend.
Einen Kommentar schreiben:
-
Ahhhh... cool...
Hätte ich das irgendwo nachlesen können? In der API Doku hab ich das so nicht gefunden.
Einen Kommentar schreiben:
-
$GLOBALS['PCT_CUSTOMCATALOG_API']['HOOKS']['myCallback_1'] = array('MyApiCallbacks','myFunction_1');
Einen Kommentar schreiben:
-
API: Keine Auswahl bei Hook-Callback-Funktion?
Hossa,
ich bin gerade dabei herauszufinden, was man mit der API bei einem Import so alles anstellen kann.
Frage: Wenn ich als Aktion "Hook-Callback-Funktion ausführen" wähle, erscheint rechts daneben ein Feld, mit dem man natürlich die gewünschte Funktion auswählen kann. Nur ist diese leer... wie und wo muss man diese Funktionen denn registrieren, damit die API auch Wind davon bekommt?Stichworte: -

Einen Kommentar schreiben: