Как добавить поля к 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", иначе вы можете столкнуться с проблемами при сохранении категорий.
Я надеюсь, что это помогает!