【问题标题】:Programmatically add image on category prestashop以编程方式在类别 prestashop 上添加图像
【发布时间】:2019-01-30 15:58:05
【问题描述】:

我正在尝试以编程方式在 prestashop 中使用图像创建类别。我想出了如何创建类别,但我找不到任何关于将图像添加到类别的内容。

【问题讨论】:

    标签: import prestashop


    【解决方案1】:

    分类图片存放在 PrestaShop 的 img/ 目录下,路径如下:

    /prestashop/img/c/
    

    该文件夹中的图片文件如下(以ID为3的类别为例):

    3.jpg
    3-thumb.jpg
    3-medium_default.jpg
    3-category_default.jpg
    

    您可以简单地为您的类别添加图片并添加类别 ID,如上所示。

    【讨论】:

      【解决方案2】:

      我们准备与其他软件同步的代码。这是一个例子。

      $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;
      }
      

      【讨论】:

        【解决方案3】:

        创建类别后,获取类别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'); 检索缩略图信息。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多