سیستمی‌ها
استفاده از شناسه ویژگی به جای نام ویژگی در فایل CSV محصولات - نسخه‌ی قابل چاپ

+- سیستمی‌ها (http://forums.systemiha.ir)
+-- انجمن: کامپیوتر (http://forums.systemiha.ir/forumdisplay.php?fid=1)
+--- انجمن: پرستاشاپ (PrestaShop) (http://forums.systemiha.ir/forumdisplay.php?fid=14)
+--- موضوع: استفاده از شناسه ویژگی به جای نام ویژگی در فایل CSV محصولات (/showthread.php?tid=188)



استفاده از شناسه ویژگی به جای نام ویژگی در فایل CSV محصولات - mojtabamalaekeh - 2017/02/16

سلام
چرا میخوایم از شناسه‌ی ویژگی به جای نام ویژگی در فایل CSV محصولات استفاده کنیم؟
آیا واقعاً نیاز میشه؟

وقتی که 2 یا چند ویژگی با نام‌های یکسان داشته باشید،
اگر توی فایل CSV محصولات، از نام ویژگی استفاده کنید،
پرستاشاپ اولین ویژگی‌ای که رو که با اون نام پیدا کنه در نظر می‌گیره.

منظور از اولین، اونی هست که زودتر توی دیتابیس ثبت شده (وارد جزئیات دیتابیس نمیشم).

اما چه دلیلی داره که ویژگی‌هایی با اسم مشابه داشته باشیم؟
در حالت عادی این کار معنایی نداره!
ولی مدیرانی که با یک ماژول، ویژگی‌های محصول رو دسته بندی می‌کنن ممکنه بخوان توی دسته‌های مختلف، ویژگی‌هایی با اسامی تکراری داشته باشن.

ما فایل AdminImportController.php رو دستکاری می‌کنیم تا اگر در فایل CSV محصولات، به جای نام ویژگی، یک عدد صحیح معتبر بود،
ویژگی با اون شناسه رو پیدا کنه و اگر پیدا نکرد، ناچاراً یک ویژگی به اسم اون عدد ساخته میشه!


این تغییرات با آپدیت کردن پرستاشاپ، از بین خواهند رفت!


فایلی که باید ویرایش بشه توی این مسیر هست:
کد php:
controllers/admin/AdminImportController.php 

فایل رو که در حالت ویرایش باز کردین، عبارت // Features import رو جستجو کنید.


برای پرستاشاپ 1.6

Exclamation Exclamation Exclamation اگر کدهای شما دقیقاً به این شکل هستند:

کد php:
// Features import
$features get_object_vars($product);

if (isset(
$features['features']) && !empty($features['features'])) {
    foreach (
explode($this->multiple_value_separator$features['features']) as $single_feature) {
        if (empty(
$single_feature)) {
            continue;
        }
        
$tab_feature explode(':'$single_feature);
        
$feature_name = isset($tab_feature[0]) ? trim($tab_feature[0]) : '';
        
$feature_value = isset($tab_feature[1]) ? trim($tab_feature[1]) : '';
        
$position = isset($tab_feature[2]) ? (int)$tab_feature[2] - false;
        
$custom = isset($tab_feature[3]) ? (int)$tab_feature[3] : false;
        if (!empty(
$feature_name) && !empty($feature_value)) {
            
$id_feature = (int)Feature::addFeatureImport($feature_name$position);
            
$id_product null;
            if (
$force_ids || $match_ref) {
                
$id_product = (int)$product->id;
            }
            
$id_feature_value = (int)FeatureValue::addFeatureValueImport($id_feature$feature_value$id_product$id_lang$custom);
            
Product::addFeatureProductImport($product->id$id_feature$id_feature_value);
        }
    }



Exclamation Exclamation Exclamation می‌تونید به این شکل تغییر بدین:

کد php:
// Features import
$features get_object_vars($product);

if (isset(
$features['features']) && !empty($features['features'])) {
    foreach (
explode($this->multiple_value_separator$features['features']) as $single_feature) {
        if (empty(
$single_feature)) {
            continue;
        }
        
$tab_feature explode(':'$single_feature);
        
$feature_name = isset($tab_feature[0]) ? trim($tab_feature[0]) : '';
        
$feature_value = isset($tab_feature[1]) ? trim($tab_feature[1]) : '';
        
$position = isset($tab_feature[2]) ? (int)$tab_feature[2] - false;
        
$custom = isset($tab_feature[3]) ? (int)$tab_feature[3] : false;

        
//  شروع بخش اول تغییرات
        
$id_feature null;
        if (
is_numeric($feature_name)) {
            
$feature_search Feature::getFeature($id_lang$feature_name);
            if (
is_array($feature_search)) $id_feature $feature_search['id_feature'];
        }
        
//  پایان بخش اول تغییرات

        
if (!empty($feature_name) && !empty($feature_value)) {

            // شروع بخش دوم تغییرات
            if (!isset($id_feature)) {
                $id_feature = (int)Feature::addFeatureImport($feature_name$position);
            }
            // پایان بخش دوم تغییرات

            
$id_product null;
            if (
$force_ids || $match_ref) {
                
$id_product = (int)$product->id;
            }
            
$id_feature_value = (int)FeatureValue::addFeatureValueImport($id_feature$feature_value$id_product$id_lang$custom);
            
Product::addFeatureProductImport($product->id$id_feature$id_feature_value);
        }
    }







برای پرستاشاپ 1.7


Exclamation Exclamation Exclamation فقط اگر کدهای شما دقیقاً به این شکل هستند:
کد php:
           // Features import
 
           $features get_object_vars($product);

 
           if (!$validateOnly && isset($features['features']) && !empty($features['features'])) {
 
               foreach (explode($this->multiple_value_separator$features['features']) as $single_feature) {
 
                   if (empty($single_feature)) {
 
                       continue;
 
                   }
 
                   $tab_feature explode(':'$single_feature);
 
                   $feature_name = isset($tab_feature[0]) ? trim($tab_feature[0]) : '';
 
                   $feature_value = isset($tab_feature[1]) ? trim($tab_feature[1]) : '';
 
                   $position = isset($tab_feature[2]) ? (int)$tab_feature[2] - false;
 
                   $custom = isset($tab_feature[3]) ? (int)$tab_feature[3] : false;
 
                   if (!empty($feature_name) && !empty($feature_value)) {
 
                       $id_feature = (int)Feature::addFeatureImport($feature_name$position);
 
                       $id_product null;
 
                       if ($force_ids || $match_ref) {
 
                           $id_product = (int)$product->id;
 
                       }
 
                       $id_feature_value = (int)FeatureValue::addFeatureValueImport($id_feature$feature_value$id_product$id_lang$custom);
 
                       Product::addFeatureProductImport($product->id$id_feature$id_feature_value);
 
                   }
 
               }
 
           


Exclamation Exclamation Exclamation می‌تونید به این شکل تغییر بدین:
کد php:
           // Features import
 
           $features get_object_vars($product);

 
           if (!$validateOnly && isset($features['features']) && !empty($features['features'])) {
 
               foreach (explode($this->multiple_value_separator$features['features']) as $single_feature) {
 
                   if (empty($single_feature)) {
 
                       continue;
 
                   }
 
                   $tab_feature explode(':'$single_feature);
 
                   $feature_name = isset($tab_feature[0]) ? trim($tab_feature[0]) : '';
 
                   $feature_value = isset($tab_feature[1]) ? trim($tab_feature[1]) : '';
 
                   $position = isset($tab_feature[2]) ? (int)$tab_feature[2] - false;
 
                   $custom = isset($tab_feature[3]) ? (int)$tab_feature[3] : false;

 
                   //  شروع بخش اول تغییرات
 
                   $id_feature null;
 
                   if (is_numeric($feature_name)) {
 
                       $feature_search Feature::getFeature($id_lang$feature_name);
 
                       if (is_array($feature_search)) $id_feature $feature_search['id_feature'];
 
                   }
 
                   //  پایان بخش اول تغییرات

 
                   if (!empty($feature_name) && !empty($feature_value)) {

 
                       // شروع بخش دوم تغییرات
 
                       if (!isset($id_feature)) {
 
                           $id_feature = (int)Feature::addFeatureImport($feature_name$position);
 
                       }
 
                       // پایان بخش دوم تغییرات

 
                       $id_product null;
 
                       if ($force_ids || $match_ref) {
 
                           $id_product = (int)$product->id;
 
                       }
 
                       $id_feature_value = (int)FeatureValue::addFeatureValueImport($id_feature$feature_value$id_product$id_lang$custom);
 
                       Product::addFeatureProductImport($product->id$id_feature$id_feature_value);
 
                   }
 
               }
 
           




اگر فایل CSV رو با نرم افزار مدیریت محصولات پرستاشاپ (PPM) تولید می‌کنید و میخواید که نرم افزار هم شناسه‌ی ویژگی‌ها رو توی فایل CSV ثبت کنه، لازمه کارهای زیر رو انجام بدید:
  1. وارد تنظیمات برنامه بشید
  2. از سربرگ‌هایی که به شکل یک نوار افقی هستن، روی سربرگ ورود محصولات کلیک کنید
  3. از سربر‌هایی که زیرمجموعه‌ی سربرگ «ورود محصولات» هستن، روی «دیگر» کلیک کنید
  4. گزینه‌ی «ذخیره‌ی شناسه‌ی ویژگی‌های موجود به جای نام آن‌ها در فایل سی.اس.وی در بخش وارد سازی محصولات جدید» رو فعال کنید
  5. روی دکمه‌ی تأیید کلیک کنید تا تنظیمات ذخیره بشن
[تصویر:  settings-import-other.png]