Как сохранить пользовательские поля в основных компонентах

22

Я пытаюсь добавить одно простое поле к каждому элементу #__content, и я очень тщательно следовал учебному пособию « Добавление пользовательских полей в основные компоненты» , заменяя «контент» на «контакт». Теперь у меня есть устанавливаемый плагин, который успешно включает вкладку / поле в форме редактирования элемента контента администратора и прекрасно работает, за исключением этой надоедливой функции «сохранения».

Единственная ссылка на Сохранение (опять же, контент вместо контакта):

Дополнительные поля загружаются из файла forms / contact.xml в каталоге плагинов. Важно, чтобы эти поля были в элементе fields со свойством name, установленным в «params». Если вы не установите это имя свойства, поля появятся на сайте администратора, но значения не будут сохранены.

Тот факт, что эта предупреждающая заметка существует, подсказывает мне, что Joomla должна знать, что поля есть, и основной код обрабатывает ее, но, поскольку она не сохраняется, мне интересно, есть ли еще одно событие, которое я должен добавить.

Вот простое поле, в котором я нуждаюсь - невидимое для пользователя, но, тем не менее, критическое и не нуждающееся в необходимости CCK для его хранения.
Что неправильно / отсутствует, что препятствует сохранению пользовательского поля?

Обновление: Надеясь на надежду, что пользовательское поле было сохранено в базе данных, я добавил столбец в таблицу #__content с тем же именем и попытался - не повезло.

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>

Вынесено HTML (без этикетки)

<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>
ВВП
источник
Я помню, как видел это в действии, когда для имени поля НЕ задано params и дополнительное поле; но это немного уродливо и потребует некоторого обслуживания после каждого обновления. Как бы мне ни нравилось, чтобы такие вещи работали, чтобы получить результат, вы рассматривали возможность использования плагина для профиля пользователя?
Риккардо Цорн
Мои данные для контента, а не для пользователя ... только учебник для контактов
ВВП
Извините, я не совсем понял, просто подключите событие onContentAfterSave и обработайте часть сохранения
Риккардо Цорн
Спасибо тебе большое за это. Я пытался разобраться в этом большую часть дня. Я совершенно новичок в разработке плагинов для Joomla, поэтому я опираюсь на примеры, чтобы начать работу. Могу ли я просто подтвердить файлы языковых строк - они идут с файлами плагинов или в существующей языковой папке? или это не важно?
Я всегда помещаю файлы в то же место, в которое их поместит расширение Joomla, то есть в этом случае в папку / languages.
ВВП

Ответы:

19

АГА! момент - в столбце #__content больше нет paramsстолбца, поэтому необходимо выполнить следующие настройки, чтобы плагин работал с компонентами / таблицами attribsвместо params(который, как представляется, только #__content начиная с версии 3.2):

  1. Измените fieldsимя на "attribs"
  2. Измените fieldsetимя на что-то уникальное (я использовал имя плагина)
  3. Добавьте строку языка для вкладки на странице редактирования контента

/forms/content.xml

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

ан-GB.plg_content_pass.ini

COM_CONTENT_GDP_FIELDSET_LABEL="My Custom Fields"
ВВП
источник
Могу ли я задать вопрос об этом здесь? или я должен создать новый вопрос? это связано с этим? В основном мне нужно знать, как добавить более одной вкладки в представление редактирования статьи. Похоже, что формы / extra.xml позволяет создать только одну вкладку. Я пробовал несколько вариантов разбиения XML-файла на наборы полей, но не повезло. Только одна вкладка.
Jonnypixel
Вы должны создать новый вопрос по этому поводу и добавить ссылку на этот вопрос / ответ, если он связан.
Bogowoe