Поле Субформы Joomla

Поле Субформы Joomla

03.02.2020 05:55:53 Просмотров 24 Источник

Мы унаследовали проект 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)

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

У вопроса есть решение - Посмотреть?

Ответы - Поле Субформы Joomla / Joomla Subform field

Является ответом!
Antony Thompson

06.02.2020 11:32:15

Поэтому, поскольку поле 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;
    }
}
Закрыть X