امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
توضیحات محصولات، پس از به روز رسانی با فایل CSV حذف می‌شوند
#1
سی اس وی 
سلام

ما میخوایم محصولات فروشگاهمون رو از طریق فایل CSV به روز رسانی کنیم.
اما نه همه‌ی مشخصات رو. فقط بعضی از مشخصات چند تا از محصولاتمون رو.

مثال:
ما با نرم افزار مدیریت محصولات پرستاشاپ، از چند تا محصولمون خروجی CSV گرفتیم
که فقط بعضی مشخصات محصولات مثل قیمت، تخفیف و... رو با ویرایشگر CSV اصلاح کنیم
و فایل رو ذخیره کنیم و از طریق «پارامترهای پیشرفته => وارد سازی CSV» به فروشگاه تزریق کنیم.

انتظار داریم خونه‌هایی رو که توی جدول CSV خالی گذاشتیم،
موقع به روز رسانی محصولات به کمک فایل CSV، تغییری نکنن و مقدار قبلیشون باقی بمونه.

اما پرستاشاپ چیکار می‌کنه؟

ابتدا باید چند موضوع رو به خودمون یادآوری کنیم:

1- به روز رسانی محصولات از طریق فایل CSV با استفاده از شناسه‌ی محصول انجام میشه.
یعنی اگه یکی از ردیف‌های جدول CSV شناسه‌اش خالی یا نامعتبر باشه، به جای اون ردیف ، یه محصول جدید ثبت میشه!
منظور از نامعتبر بودن اینه که محصولی با اون شناسه وجود نداشته باشه.

2- وارد کردن ستون «نام» توی فایل CSV محصولات اجباریه.
یعنی اگه نام محصول خالی باشه (حتی اگر شناسه‌اش معتبر باشه) اون سطر از جدول CSV نادیده گرفته میشه و محصول آپدیت نمیشه.

3- بعضی فیلدها متنی هستند و بعضی فیلدها غیر متنی.
منظور از فیلدهای متنی مشخصاتی از محصول مثل توضیح کوتاه، توضیحات، یو آر ال آشنا، توضیحات متا و.... است.
منظور از فیلد غیر متنی، مشخصاتی از محصول مثل قیمت و وزن و... (که عددی هستند)
همچنین شاخه‌ها و ویژگی‌ها و...

حالا می‌دونیم که منظور از «فیلدهای متنی» چیه! بریم سر اصل مطلب...
پرستاشاپ هر فیلد متنی رو که توی فایل CSV خالی گذاشته باشید پاک می‌کنه!! به غیر از فیلد کد مرجع.

ولی ما میخوایم اگه برای چند تا از محصولاتمون، توضیحات یا یو آر ال آشنا و... رو وارد نکردیم یا مثلاً اگه یک ستون رو کامل خالی گذاشتیم،
همون مقادیر قبلی باقی بمونن و چیزی پاک نشه.

برای این کار باید یکی از فایل‌های پرستاشاپ رو اصلاح کنیم.

توجه‌های لازم، قبل از شروع کار

1- تغییراتی که در این تاپیک گفته شده باید در فایل AdminImportController.php انجام دهید، در 2 حالت زیر از بین رفته و به حالت قبل بر می‌گردند:
الف) در صورت به روز رسانی پرستاشاپ،
ب) در صورت بازگردانی بکاپ سایت به زمانی قبل از انجام این تغییرات.

2- شاخه‌ی پیشفرض محصولاتی که با فایل CSV ویرایش می‌کنید، ناخواسته عوض می‌شوند!
برای جلوگیری از این مشکل، تاپیک «جلوگیری از تغییر ناخواسته‌ی شاخه‌ی پیشفرض، هنگام به روز رسانی محصولات با فایل CSV» را بخوانید.

3- محصولاتی که با فایل CSV افزوده یا ویرایش می‌شوند، در جستجوی بخش کاربری فروشگاه، پیدا نخواهند شد.
برای حل این مسئله، تاپیک «اولین اقدام پس از واردسازی یا ویرایش محصولات با فایل CSV چیست؟» را بخوانید.

4- قبل از افزودن یا ویرایش محصول با فایل CSV، از دیتابیس فروشگاه بکاپ بگیرید.

5- هنگام ویرایش محصولات از طریق فایل CSV ابتدا ویرایش 1 محصول را آزمایش کنید.
پس از واردسازی فایل CSV، محصول ویرایش شده را بررسی کنید و در صورت عدم وجود مشکل، کار ویرایش بقیه‌ی محصولات را انجام دهید.

6- اگر منابع هاست شما محدود هستند (قدرت سرور کم است) نباید تعداد زیادی محصول را با فایل CSV اضافه یا ویرایش کنید.
از تعداد کم (30 محصول در یک فایل) شروع کرده و در آینده آن را افزایش دهید تا به طور تجربی حداکثر تعداد محصول در یک فایل را به دست آورید.

7- اگر شاخه‌هایی با نام‌های یکسان دارید، هرگز محصولات را با یک فایل سی.اس.وی که حاوی نام شاخه‌ها است به روز رسانی نکنید.
به جای آن از شناسه‌ی شاخه‌ها در فایل سی.اس.وی استفاده کنید.

مراحل کار

1- ابتدا فایل AdminImportController.php رو از مسیر زیر در هاست خودتون پیدا کنید و ویرایش (Edit) کنید.
کد:
controllers\admin\AdminImportController.php

2- این دو خط رو پیدا کنید:
کد:
AdminImportController::setEntityDefaultValues($product);
AdminImportController::arrayWalk($info, array('AdminImportController', 'fillInfo'), $product);
می‌تونید با استفاده از جستجوی مرورگرتون (Ctrl+F) کدها رو سریع‌تر پیدا کنید.

3- قبل از این 2 خط کدی که در بالا دیدین کدهای زیر رو اضافه کنید:
کد:
            $string_field_names = array('description_short', 'description', 'meta_title', 'meta_keywords', 'meta_description', 'link_rewrite');
            foreach($string_field_names as $string_field_name)
                if (isset($info[$string_field_name]) && strlen($info[$string_field_name]) == 0)
                    unset($info[$string_field_name]);

یعنی نتیجه به این شکل میشه:
کد:
            $string_field_names = array('description_short', 'description', 'meta_title', 'meta_keywords', 'meta_description', 'link_rewrite');
            foreach($string_field_names as $string_field_name)
                if (isset($info[$string_field_name]) && strlen($info[$string_field_name]) == 0)
                    unset($info[$string_field_name]);
            
           AdminImportController::setEntityDefaultValues($product);
           AdminImportController::arrayWalk($info, array('AdminImportController', 'fillInfo'), $product);

4- فایل رو ذخیره کنید.

5- عملکرد واردسازی محصول از طریق فایل CSV رو در فروشگاهتون تست کنید و اگر مشکلی داشتید به پشتیبانی سیستمی‌ها اطلاع بدین.

تصویر فایل قبل از اصلاح:

[تصویر:  keep_text_fields_before.png]

تصویر فایل بعد از اصلاح:

[تصویر:  keep_text_fields_after.png]
پاسخ
roseتشکر شده توسط:


پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان