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

Я использую 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 Ответ

0 голосов
/ 18 ноября 2011

Полагаю, в вашем файле плагина (например, "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", иначе вы можете столкнуться с проблемамипри сохранении категорий.

Надеюсь, это поможет!

...