Поле Joomla Subform - PullRequest
       7

Поле Joomla Subform

0 голосов
/ 03 февраля 2020

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

У нас возникли проблемы с пониманием того, как реализовать это в базе данных. Есть ли какое-то соглашение об именах, чтобы сообщить Joomla, какую таблицу / внешние ключи использовать?

Мы получили это в файле xml:

<?xml version="1.0" encoding="UTF-8"?>
<field
    name="gallery_images"
    type="subform"
    label="Gallery Images"
    description="Images for the gallery"
    multiple="true"
    min="1"
    max="10"
    >
    <form>
        <field
            name="image_url"
            type="media"
            label="Image"
            />
    </form>
</field>

Затем мы втягиваем в Редактирование формы. php Файл выглядит так:

<div class="control-group">
    <div class="control-label"><?php echo $this->form->getLabel('gallery_images'); ?></div>
    <div class="controls"><?php echo $this->form->getInput('gallery_images'); ?></div>
</div>

На самом деле все это прекрасно работает на серверной части. Но это никуда не спасло. Мы попытались создать поле на столе продуктов, думая, что оно будет храниться как JSON. Мы попытались создать еще одну таблицу для изображений с product_id, подумав, может быть, Joomla просто работает с внешним ключом?

Документация Joomla, похоже, ничего не говорит о том, как она работает в БД. (https://docs.joomla.org/Subform_form_field_type)

Заранее спасибо.

1 Ответ

0 голосов
/ 06 февраля 2020

Итак, так как поле gallery_images было сохранено joomla, мы написали некоторый код, чтобы сделать это вручную.

class ModelProduct extends JModelAdmin
{
    public function save($data) {
        if (parent::save($data)) {
            $registry = new Registry;
            $registry->loadArray($data['gallery_image']);
            $data['gallery_image'] = (string) $registry;
            $db = JFactory::getDbo();
            $query = $db->getQuery(true);

            // Fields to update.
            $fields = array(
                $db->quoteName('gallery_image') . ' = ' . $db->quote($data['gallery_image']),
            );

            // Conditions for which records should be updated.
            $conditions = array(
                $db->quoteName('id') . ' = '.$data['id'],
            );

            $query->update($db->quoteName('v4yn2_product'))->set($fields)->where($conditions);
            $db->setQuery($query);
            $result = $db->execute();
            return true;
        }
        return false;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...