Как добавить поля к com_content в Joomla! с плагином и хранить данные в собственной таблице?

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

Пример плагина находится по адресу: /plugins/user/profile

Этот плагин позволяет размещать настраиваемые поля формы на пользовательском и пользовательском профилях профиля, и эти поля хранятся в пользовательской таблице.

Я создал аналогичный плагин для профилей пользователей, и он работал отлично.

Тем не менее, когда я иду, чтобы создать плагин, как это для com_content, я сталкиваюсь с проблемой.

Вот как выглядит мой XML-файл:

<?xml version="1.0" encoding="utf-8"?>
  <form>
   <fields name="additionalinfo">
    <fieldset name="additionalinfo_fieldset" label="PLG_CONTENT_ADDITIONALINFO_FIELDSET_LABEL">
        <field name="tagline" type="text" size="50" default="" label="PLG_CONTENT_ADDITIONALINFO_TAGLINE_LABEL" description="PLG_CONTENT_ADDITIONALINFO_TAGLINE_DESC" />
        <field name="pseudocategory" type="category" extension="com_content" label="PLG_CONTENT_ADDITIONALINFO_PSEUDOCATEGORY_FIELD_LABEL" description="PLG_CONTENT_ADDITIONALINFO_PSEUDOCATEGORY_FIELD_DESC" />
    </fieldset>
  </fields>
</form>

Это, однако, не работает, когда я делаю что-то, как указано выше, поля формы никогда не отображаются в форме администратора (несмотря на то, что он установлен правильно, и единственное, что изменилось между плагином пользователя и плагином контента, это имя форма, я хотел бы, чтобы форма появилась на

Когда я изменяю свой XML на это:

<?xml version="1.0" encoding="utf-8"?>
  <form>
   <fields name="attribs">
    <fieldset name="additionalinfo_fieldset" label="PLG_CONTENT_ADDITIONALINFO_FIELDSET_LABEL">
        <field name="tagline" type="text" size="50" default="" label="PLG_CONTENT_ADDITIONALINFO_TAGLINE_LABEL" description="PLG_CONTENT_ADDITIONALINFO_TAGLINE_DESC" />
        <field name="pseudocategory" type="category" extension="com_content" label="PLG_CONTENT_ADDITIONALINFO_PSEUDOCATEGORY_FIELD_LABEL" description="PLG_CONTENT_ADDITIONALINFO_PSEUDOCATEGORY_FIELD_DESC" />
    </fieldset>
  </fields>
</form>

Когда я делаю это простое изменение, появляются поля формы! НО данные не сохраняются и не извлекаются из пользовательской таблицы, они просто попадают в столбец attribs таблицы _content. Это сохраняет содержимое в JSON, что нормально, но мы хотели бы иметь возможность индексировать содержимое по настраиваемым полям (и не нужно циклически просматривать каждую запись в базе данных, чтобы найти то, что мы ищем).

Любые идеи о том, как это исправить?

Спасибо!

Дэвид Барратт

1 ответ

Я предполагаю, что ваш файл плагина (например, "yourplugin.php") будет иметь один метод с именем "onContentPrepareForm". Если вы хотите добавить данные в статью, этот метод должен начинаться так:

function onContentPrepareForm($form, $data)
{

    if (!($form instanceof JForm))
    {
        $this->_subject->setError('JERROR_NOT_A_FORM');
        return false;
    }

    // Check we're manipulating an
    if ( $form->getName() != "com_content.article" ) {
        return true;
    }
    //[...] The rest of your code here

Кроме того, если вы хотите сохранить эти поля в другой таблице, чтобы упростить поиск с использованием этих полей, возможно, вам следует создать новую таблицу и сохранить данные, используя метод onContentAfterSave:

public function onContentAfterSave( $context, &$article, $isNew )

В этом методе вы всегда должны проверять, что $context - это "com_content.article", иначе вы можете столкнуться с проблемами при сохранении категорий.

Я надеюсь, что это помогает!

Другие вопросы по тегам