[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • Metafelder bei Installation eines Addon erstellen
Seite 1 von 1

Metafelder bei Installation eines Addon erstellen

Verfasst: 11. Aug 2016, 10:22
von Oliver.Kreischer
Hallo Zusammen,

bei der Installation eines Addons bzw. in der function.php des Theme Addons würde ich gerne einige Meta Info Felder erstellen. Selbstverständlich ohne die zu überschreiben falls diese Felder schon existieren.

Code: Alles auswählen

rex_metainfo_add_field 
Scheint an der Stelle nicht zu funktionieren.
Mit
$sql = rex_sql::factory();
$sql->setQuery(...
komme ich auch nicht weiter und

Code: Alles auswählen

rex_api_metainfo_default_fields_create
verstehe ich schlicht nicht.

Hat einer von Euch evtl. ein Beispiel dafür?

LG
Oliver

Re: Metafelder bei Installation eines Addon erstellen

Verfasst: 11. Aug 2016, 11:12
von runstop64
Hi Oli,

ein Beispiel habe ich nicht, aber ich denke, in

Code: Alles auswählen

rex_api_metainfo_default_fields_create
ist alles ganz gut sehen:

Du hast ein Array von eigenen Feldern:
https://github.com/redaxo/redaxo/blob/m ... hp#L21-L25

Holst die vorhandenen aus der DB
https://github.com/redaxo/redaxo/blob/m ... hp#L38-L39

Und vergleichst sie
https://github.com/redaxo/redaxo/blob/m ... hp#L41-L48

Ich glaube, das müsste so rasukopiert werden können.

Re: Metafelder bei Installation eines Addon erstellen

Verfasst: 11. Aug 2016, 12:45
von Oliver.Kreischer
Hallo Daniel,

danke für deine Antwort.
runstop64 hat geschrieben:Ich glaube, das müsste so rasukopiert werden können.
Funktioniert leider nicht. Auch einiges rumprobieren war nicht erfolgreich.

Vielleicht hat ja tatsächlich jemand ein Beispiel?

LG
Oliver

Re: Metafelder bei Installation eines Addon erstellen

Verfasst: 11. Aug 2016, 13:35
von Oliver.Kreischer
So. Ist zwar "ne Krücke" geht aber:

Code: Alles auswählen

if ($theme_meta_infos_anlegen == '1') {
  $qry = "
    INSERT IGNORE INTO rex_metainfo_field (title,name,type_id)VALUES ('hallo','art_hallo','1');
    ALTER TABLE rex_article ADD art_hallo VARCHAR( 255 ) NOT NULL;
  ";

  $sql = rex_sql::factory();
  // $sql->setDebug();
  $sql->setQuery($qry);
LG
Oliver

Re: Metafelder bei Installation eines Addon erstellen

Verfasst: 11. Aug 2016, 13:42
von runstop64
Hi Oli, bei mir klappt es.

Du solltest es über den EP PACKAGES_INCLUDED aufrufen, damit alle Funktionen sicher geladen sind:

Code: Alles auswählen

rex_extension::register('PACKAGES_INCLUDED', 'meta_test', rex_extension::LATE);

function meta_test()
{
    $prefix = 'art\_%';
    $defaultFields = [
        ['translate:online_from', 'art_test1', '1', '', '10', ''],
        ['translate:online_to', 'art_test2', '2', '', '10', ''],
        ['translate:description', 'art_test3', '3', '', '2', ''],
    ];

    $sql = rex_sql::factory();
    $sql->setDebug(true);
    $sql->getArray('SELECT name FROM '.rex::getTable('metainfo_field').' WHERE name LIKE ?', [$prefix]);
    $existing = array_column($existing, 'name', 'name');

    foreach ($defaultFields as $field) {
        if (!isset($existing[$field[1]])) {
            $return = call_user_func_array('rex_metainfo_add_field', $field);
            if (is_string($return)) {
                throw new rex_api_exception($return);
            }
        }
    }
}

Re: Metafelder bei Installation eines Addon erstellen

Verfasst: 11. Aug 2016, 14:12
von Oliver.Kreischer
Hm.

Wenn ich das per C&P in die functions.php einfüge bekomme ich

Code: Alles auswählen

"ErrorException" thrown in /Applications/MAMP/htdocs/rextest/redaxo/src/core/lib/extension.php on line 65
Fatal error: Argument 2 passed to rex_extension::register() must be callable, string given, called in /Applications/MAMP/htdocs/rextest/theme/private/lib/functions.php on line 43 and defined
LG
Oliver

Re: Metafelder bei Installation eines Addon erstellen

Verfasst: 11. Aug 2016, 14:35
von runstop64
Seltsam,
als callable sollte ein Funktionsname als String angenommen werden.

Welche PHP-Version läuft bei Dir? Kollidiert es vielleicht mit den übrigen Inhalten in functions.php oder irgendwelchen Addons? Ich habe es auf einer relativ leeren Testinstallation laufen.

Re: Metafelder bei Installation eines Addon erstellen

Verfasst: 11. Aug 2016, 14:37
von Oliver.Kreischer
PHP 5.6.10 / und ich hab aktuell viele Addons installiert..
In der functions.php steht sonst nichts.

LG
Oliver

Re: Metafelder bei Installation eines Addon erstellen

Verfasst: 11. Aug 2016, 14:40
von runstop64
Ich habe gerade mal testweise die Funktion rausgenommen. Dann wird dieser Fehler geworfen. Anscheinend findet er den Funktionsnamen nicht. Tippfehler? Oder evtl. mal EP-Aufruf und Funktionsdefinition tauschen?

Re: Metafelder bei Installation eines Addon erstellen

Verfasst: 11. Aug 2016, 14:44
von runstop64
Was hast Du denn dann davor stehen, dass der Fehler in Zeile 43 kommt? Bei mir ist es Zeile 2.

Re: Metafelder bei Installation eines Addon erstellen

Verfasst: 11. Aug 2016, 14:47
von Oliver.Kreischer
Hm. Auch mit noch etwas basteln will es nicht.
Egal. So wie ich es jetzt habe ist es für mich ausreichend.

Danke!
Oliver