Joomla 子表单字段
Joomla Subform field
我们继承了一个Joomla项目,需要实现产品图片的重复字段。
我们无法理解如何在数据库中实现它。是否有一些命名约定告诉 Joomla 使用什么 table/foreign 键?
我们在 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>
然后我们将其拉入格式 edit.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>
这实际上在后端完美运行。但它不保存任何地方。我们尝试在产品 table 上创建一个字段,认为它可能会存储为 JSON。我们已经尝试为带有 product_id 的图像创建另一个 table,认为 Joomla 可能只是计算外键?
Joomla 文档似乎没有说明它在数据库中的工作方式。 (https://docs.joomla.org/Subform_form_field_type)
提前致谢。
因此,由于 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;
}
}
我们继承了一个Joomla项目,需要实现产品图片的重复字段。
我们无法理解如何在数据库中实现它。是否有一些命名约定告诉 Joomla 使用什么 table/foreign 键?
我们在 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>
然后我们将其拉入格式 edit.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>
这实际上在后端完美运行。但它不保存任何地方。我们尝试在产品 table 上创建一个字段,认为它可能会存储为 JSON。我们已经尝试为带有 product_id 的图像创建另一个 table,认为 Joomla 可能只是计算外键?
Joomla 文档似乎没有说明它在数据库中的工作方式。 (https://docs.joomla.org/Subform_form_field_type)
提前致谢。
因此,由于 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;
}
}