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>

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"

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.