Jak zapisać pola niestandardowe w podstawowych komponentach

22

Próbuję dodać jedno, proste pole do każdego elementu #__content i bardzo uważnie postępowałem zgodnie z samouczkiem w temacie Dodawanie niestandardowych pól do podstawowych składników , zastępując „treść” słowem „kontakt”. Mam teraz instalowalną wtyczkę, która z powodzeniem zawiera kartę / pole w formularzu edycji elementu treści administratora i działa doskonale, z wyjątkiem tej irytującej funkcji „zapisywania”.

Jedynym odniesieniem do Zapisywania jest (ponownie treść zamiast kontaktu):

Dodatkowe pola są ładowane z pliku form / contact.xml w katalogu wtyczek. Ważne jest, aby te pola znajdowały się w elemencie field z właściwością name ustawioną na „params”. Jeśli nie ustawisz tej nazwy właściwości, pola pojawią się w witrynie administratora, ale wartości nie zostaną zapisane.

Fakt, że ta uwaga istnieje, sugeruje mi, że Joomla powinna wiedzieć, że pola tam są, a główny kod sobie z tym radzi, ale skoro nie zapisuje, zastanawiam się, czy istnieje inne wydarzenie, które powinienem dodać.

Oto proste pole, którego potrzebuję - niewidoczne dla użytkownika, ale mimo to krytyczne i nigdzie nie potrzeba CCK do jego przechowywania.
Co jest źle / brakuje, co uniemożliwia zapisanie niestandardowego pola?

Aktualizacja: Mając nadzieję, że niestandardowe pole zostało zapisane w bazie danych, dodałem kolumnę do tabeli #__content o tej samej nazwie i spróbowałem - bez powodzenia.

gdp.php

class plgContentGdp extends JPlugin {
    protected $autoloadLanguage = true;
    function onContentPrepareForm($form, $data) {
        $app = JFactory::getApplication();
        $option = $app->input->get('option');
        switch($option) {
            case 'com_content':
                if ($app->isAdmin()) {
                    JForm::addFormPath(__DIR__ . '/forms');
                    $form->loadFile('content', false);
                }
                return true;
        }
        return true;
    }
}

/forms/content.xml

<?xml version="1.0" encoding="UTF-8"?>
<form>
    <fields name="params" >
        <fieldset name="params" >
            <field
                name="content_myfield"
                type="text"
                label="PLG_CONTENT_GDP_MYFIELD"
                />
        </fieldset>
    </fields>
</form>

Renderowany HTML (bez etykiety)

<div class="tab-pane active" id="attrib-params">
    <div class="control-group ">
        <div class="controls">
            <input
                type="text"
                value=""
                id="jform_params_content_myfield"
                name="jform[params][content_myfield]"
                class=""
                aria-invalid="false"
                >
        </div>
    </div>
</div>
PKB
źródło
Pamiętam, jak widziałem to w akcji z nazwą pola NIE ustawioną na parametry i dodatkowym polem; ale to trochę brzydkie i będzie wymagało konserwacji po każdej aktualizacji. O ile lubię sprawiać, by tego rodzaju rzeczy działały, aby uzyskać wynik, czy zamiast tego zastanawiałeś się nad zastosowaniem wtyczki profilu użytkownika?
Riccardo Zorn
Moje dane dotyczą treści, nie użytkownika ... tylko samouczek dotyczy kontaktów
PKB
Przepraszam, że nie było jasne, po prostu dołącz do zdarzenia onContentAfterSave i zajmij się częścią oszczędzającą
Riccardo Zorn,
Dziękuję bardzo za to. Próbowałem to załatwić przez większą część dnia. Jestem całkiem nowy w rozwoju wtyczek Joomla, więc polegam na przykładach, które pomagają mi zacząć. Czy mogę tylko potwierdzić pliki ciągów językowych - czy idą one z plikami wtyczek, czy w istniejącym folderze językowym? czy to nie ma znaczenia?
Zawsze umieszczam pliki w tym samym miejscu, w którym je wstawiłoby rozszerzenie Joomla, tj. W tym przypadku folder / languages.
PKB

Odpowiedzi:

19

AHA! moment - #__content nie ma już paramskolumny, więc należy wprowadzić następujące korekty, aby wtyczka działała z komponentami / tabelami attribszamiast params((która wydaje się być #__content od wersji 3.2):

  1. Zmień fieldsnazwę na „atrybuty”
  2. Zmień fieldsetnazwę na coś unikalnego (użyłem nazwy wtyczki)
  3. Dodaj ciąg języka dla karty na stronie edycji treści

/forms/content.xml

<form>
    <fields name="attribs" >
        <fieldset name="gdp" >
            <field
                name="myfield"
                type="text"
                label="PLG_CONTENT_GDP_MYFIELD"
                />
        </fieldset>
    </fields>
</form>

en-GB.plg_content_pass.ini

COM_CONTENT_GDP_FIELDSET_LABEL="My Custom Fields"
PKB
źródło
czy mogę tutaj o to zapytać? czy powinienem utworzyć nowe pytanie? jest to związane z tym? Zasadniczo muszę wiedzieć, jak dodać więcej niż jedną kartę do widoku edycji artykułu. Wygląda na to, że form / extra.xml pozwala tylko utworzyć jedną kartę. Próbowałem kilku wariantów podziału pliku xml na zestawy pól, ale bez powodzenia. Tylko jedna karta.
Jonnypixel
Powinieneś utworzyć nowe pytanie na ten temat i dodać link do tego pytania / odpowiedzi, jeśli są powiązane.
Bogowoe