【发布时间】:2019-01-30 15:58:05
【问题描述】:
我正在尝试以编程方式在 prestashop 中使用图像创建类别。我想出了如何创建类别,但我找不到任何关于将图像添加到类别的内容。
【问题讨论】:
标签: import prestashop
我正在尝试以编程方式在 prestashop 中使用图像创建类别。我想出了如何创建类别,但我找不到任何关于将图像添加到类别的内容。
【问题讨论】:
标签: import prestashop
分类图片存放在 PrestaShop 的 img/ 目录下,路径如下:
/prestashop/img/c/
该文件夹中的图片文件如下(以ID为3的类别为例):
3.jpg
3-thumb.jpg
3-medium_default.jpg
3-category_default.jpg
您可以简单地为您的类别添加图片并添加类别 ID,如上所示。
【讨论】:
我们准备与其他软件同步的代码。这是一个例子。
$object->name = array((int)Configuration::get('PS_LANG_DEFAULT') => $nombre);
$object->link_rewrite = array((int)Configuration::get('PS_LANG_DEFAULT') => str2url($nombre));
$object->description = array((int)Configuration::get('PS_LANG_DEFAULT') => $nombre);;
$object->meta_title = array((int)Configuration::get('PS_LANG_DEFAULT') => $nombre);
$object->meta_description = array((int)Configuration::get('PS_LANG_DEFAULT') => $nombre);
$object->meta_keywords = array ( (int)Configuration::get('PS_LANG_DEFAULT') => getMetaKeywords($nombre,2));
$object->id_parent = $parent;
$object->save();
$image = new Image();
if (!copyImg2($object->id, $image->id, $imagen, 'categories', true))
{
$image->delete();
}
function copyImg2($id_entity, $id_image, $url, $entity = 'products', $regenerate = true) {
$tmpfile = tempnam(_PS_TMP_IMG_DIR_, 'ps_import');
$watermark_types = explode(',', Configuration::get('WATERMARK_TYPES'));
switch ($entity) {
default:
case 'products':
$image_obj = new Image($id_image);
$path = $image_obj->getPathForCreation();
break;
case 'categories':
$path = _PS_CAT_IMG_DIR_ . (int) $id_entity;
break;
case 'manufacturers':
$path = _PS_MANU_IMG_DIR_ . (int) $id_entity;
break;
case 'suppliers':
$path = _PS_SUPP_IMG_DIR_ . (int) $id_entity;
break;
}
$url = str_replace(' ', '%20', trim($url));
if (!ImageManager::checkImageMemoryLimit($url))
return false;
if (Tools::copy($url, $tmpfile)) {
ImageManager::resize($tmpfile, $path . '.jpg');
$images_types = ImageType::getImagesTypes($entity);
if ($regenerate)
foreach ($images_types as $image_type) {
ImageManager::resize($tmpfile, $path . '-' . stripslashes($image_type['name']) . '.jpg', $image_type['width'], $image_type['height']);
if (in_array($image_type['id_image_type'], $watermark_types))
Hook::exec('actionWatermark', array('id_image' => $id_image, 'id_product' => $id_entity));
}
}
else {
unlink($tmpfile);
return false;
}
unlink($tmpfile);
return true;
}
【讨论】:
创建类别后,获取类别ID并创建/上传或名称为'id_of_category'.jpg的图片并将其放入根文件夹/img/c/。
同时复制这张照片并将其命名为'id_of_category'-category_default.jpg,并制作另一个更小的版本,名称为'id_of_category'-medium_default.jpg。
因此,如果您创建一个 ID 为 10 的类别,则制作 3 张图片。
两张高分辨率图片(默认 prestashop 使用 870x217 分辨率)
10.jpg
10-category_default.jpg
一种中等分辨率(默认 prestashop 使用 125x125 分辨率)
10-medium_default.jpg
并将它们全部放入文件夹/img/c/。
这将适用于默认的 prestashop 主题/安装,但要与图像的后台设置完全兼容(自定义主题可以有不同的图像名称后缀以及高度和宽度)看看AdminCategoriesController.php 和它的方法@ 987654329@ 以查看通过后台的类别设置上传图像时如何处理图像。
要查找的主要内容是ImageType::getImageTypes('categories');,它检索有关类别图像设置的所有信息,ImageType::getFormatedName('medium'); 检索缩略图信息。
【讨论】: