رفتن به مطلب

افزودن مقدار اعشاری در سبد خرید


پست های پیشنهاد شده

سلام خدمت اساتید

ورژن پرستا : prestashop_1.6.1.18_rtl_1.0

برای فروش محصولات یک قنادی لازمه بتونیم وزن کالا رو بصورت اعشاری هم قرار بدیم

مثلا فروش 2.5 کیلوگرم کیک ...

با کمی سرچ در انجمن های خارجی مشاهده شد اینکار با تغییر در کدها امکان پذیر هست

لینک

در روش فوق int با float جایگزین میشه ( در حین نوشتن این مطلب دیدم گفتن intval هم به floatval تغییر بدیم که هنوز انجام ندادم)

البته در مرحله 1 گفته تغییراتی در دیتابیس داده بشه که موفق به انجامش نشدم

 

1) Change the database quantity related fields type to DECIMAL (17,2).

 

ps_product: quantity, minimal_quantity

ps_order_return_detail: product_quantity

ps_pack: quantity

ps_product_attribute: quantity, minimal_quantity

ps_product_sale: quantity

ps_stock: physical_quantity, usable_quantity

ps_cart_rule: quantity, quantity_per_user

ps_customization: quantity, quantity_refunded, quantity_returned

ps_order_detail: product_quantity, product_quantity_in_stock, product_quantity_refunded, product_quantity_return

ps_specific_price_rule: from_quantity

ps_order_slip_detail: product_quantity

ps_supply_order_detail: quantity_recieved, quantity_expected

ps_stock_avaible: quantity 

ps_cart_product: quantity 

ps_stock_mvt: physical_quantity

ps_cart_rule_product_rule_group: quantity

مثلا خواسته در ps_product مقدار quantity, minimal_quantity به عددی اعشاری مثل 17.2 تغییر بدیم

بنده در لوکال و قسمت phpmyadmin به دیتابیس مورد نظر رفتم و تغییراتو انجام دادم ولی وقتی مثلا 17.2 رو در فیلد وارد میکنم اتوماتیک 17 جایگزین میشه

 

در مرحله بعد سعی کردم استپ افزایش تعداد محصولات رو تغییر بدم

یعنی وقتی + یا - میزنیم به جای 1 واحد 0.5 واحد اضافه و کم بشه

لینک

روش جالبیه،میتونیم برای هر شاخه یه مقدار دلخواه بزاریم

 

اینجا هم اومدم در فایل Product.tpl دقیقا بعد از <div class="product_attributes clearfix"> کد رو به این صورت تغییر دادم

<input type="number" min="1" step="0.5" name="qty"

فقط یه step="0.5" اضاف کردم

 

فایل  Product.js  هم به این صورت تغییر دادم

// The button to increment the product value
$(document).on('click', '.product_quantity_up', function(e){
    e.preventDefault();
    fieldName = $(this).data('field-qty');
    var currentVal = parseFloat($('input[name='+fieldName+']').val());
    if (!allowBuyWhenOutOfStock && quantityAvailable > 0)
        quantityAvailableT = quantityAvailable;
    else
        quantityAvailableT = 100000000;
    if (!isNaN(currentVal) && currentVal < quantityAvailableT)
        $('input[name='+fieldName+']').val(currentVal + 0.5).trigger('keyup');
    else
        $('input[name='+fieldName+']').val(quantityAvailableT);

    $('#quantity_wanted').change();
});
 // The button to decrement the product value
$(document).on('click', '.product_quantity_down', function(e){
    e.preventDefault();
    fieldName = $(this).data('field-qty');
    var currentVal = parseFloat($('input[name='+fieldName+']').val());
     if (!isNaN(currentVal) && currentVal > 1 && currentVal > 0.5)
        $('input[name='+fieldName+']').val(currentVal - 0.5).trigger('keyup');
    else
        $('input[name='+fieldName+']').val(0.5);

    $('#quantity_wanted').change();
});

http://uupload.ir/files/z3bm_site.png

 

در نهایت با پاک کردن کش،همونجور که در تصویر میبینید step ها 0.5 اضاف میکنه و تا اینجا اوکی بود

ولی وقتی اضافه به سبد میزینم مثلا برای مقدار 3.5، 3 رو به سبد اضاف میکنه

و مشکل دوم اینکه هنوز در سبد + - که بزنیم 1 عدد زیاد یا کم میشه،اینو به نظرم باید تغییراتی در cart-summary.js انجام داد که هنوز نتونستم کد مورد نظر رو پیدا کنم

 

2) For Cart page In the cart-summary.js you need to replace the script

qty = 1;

  to 

qty = 0.1;

 

الان برای حل مشکلم دو راه دارم

1) وزن رو به کیلوگرم بزارم و step هارو به 0.5 تغییر بدم

برای رسیدن به این منظور که ایده الم همینه،باید کاری کنم که مثلا 3.5 هم به سبد اضاف بشه و در سبد هم با زدن + یا - مقدار 0.5 اضاف و کم بشه

 

 

2) اگر نشد عدد اعشاری به سبد اضاف کرد وزن رو به گرم بزارم

step هارو به 500 و min رو به 1000 تغییر بدم

در این حالت فقط باید مشکل + - در سبد حل بشه

 

البته هر دو حالت یه مشکل دیگه هم دارن که مشتری اگه در فیلد تعداد بصورت دستی عدد وارد کنه به سبد اضاف میشه

مثلا در حالت دوم اگه دستی بزنه 1001 به سبد اضاف میشه در صورتی که ما میخوایم فقط 1000+500x بتونه به سبد اضاف بشه

 

این پست رو به صورت تیکت هم ارسال میکنم

در آخر هم اگه فکر میکنین راهی نداره و سیستم مدیریت محتوایی میشناسید که این نیاز منو برطرف کنه ممنون میشم معرفی کنید برای کوچ

 

ممنون که وقت گذاشتین و پست منو مطالعه کردین

 

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر

 

2) اگر نشد عدد اعشاری به سبد اضاف کرد وزن رو به گرم بزارم

step هارو به 500 و min رو به 1000 تغییر بدم

در این حالت فقط باید مشکل + - در سبد حل بشه

مشکل + - در سبد هم حل شد

themes\default-bootstrap\js\cart-summary.js

function upQuantity(id, qty)
{
	if (typeof(qty) == 'undefined' || !qty)
		qty = 500;
function downQuantity(id, qty)
{
	var val = $('input[name=quantity_' + id + ']').val();
	var newVal = val;
	if(typeof(qty) == 'undefined' || !qty)
	{
		qty = 500;
		newVal = val - 1;

البته هنوز مشتری میتونه به صورت دستی عددی مثل 1200 وارد کنه و به سبد اضافه کنه

درصورتی که ما میخوایم فقط اعداد 1000+500x قابل اضاف شدن به سبد داشته باشن

اگر در این ضمینه بتونین راهنمایی کنین ممنون میشم

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر

در پوشه classes فایل Product.php را باز کنید و دنبال متد زیر باشید:

public function checkQty

در این متد همون ابتدا می‌تونید شرطی بذارید که اگر باقیمانده مقدار بر مثلا ۵۰۰ عدد صفر نبود false بشه و محصول به سبد اضافه نشه
این برای افزودن یا تغییر سبد در هر جایی از فروشگاه کار خواهد کرد.
 

if ($qty%500 !=0)
    return false;
لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر

 

در پوشه classes فایل Product.php را باز کنید و دنبال متد زیر باشید:

 

 

ممنون انجام شد

    /**
     * Check product availability
     *
     * @param int $qty Quantity desired
     * @return bool True if product is available with this quantity
     */
    public function checkQty($qty)
    {
        if (Pack::isPack((int)$this->id) && !Pack::isInStock((int)$this->id)) {
            return false;
        }

        if ($this->isAvailableWhenOutOfStock(StockAvailable::outOfStock($this->id))) {
            return true;
        }

        if (isset($this->id_product_attribute)) {
            $id_product_attribute = $this->id_product_attribute;
        } 
		if ($qty%500 !=0) {
			return false;
		}
		else {
            $id_product_attribute = 0;
        }

        return ($qty <= StockAvailable::getQuantityAvailableByProduct($this->id, $id_product_attribute));
    }

فقط الان اگه بشه پیام خطا رو هم بدون ترجمه و با کد بهش بدیم خوبه

چون الان پیام میده موجودی کافی نیست با ترجمه اصلاحش کردم

به این صورت سعی کردم پیامو وارد کنم ولی درست عمل نکرد

if ($qty%500 !=0) {
			alert("Quantity is incorrect");
			return false;
		}

 

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر

  • 2 weeks later...

بنده موفق شدم مقدار اعشاری رو به سبد خرید اضافه کنم

هدف این بود بتونیم هم مثلا 1.5 کیلو کیک بتونیم بفروشیم هم 1 بسته شکلات

هنوز مشکلاتی داره ولی روش انجامشو شرح میدم،کامل که شد یه pdf درست میکنم و تو پست اول قرار میدم

 

فایل زیر را دانلود کنید

لینک

Password : ipresta.ir

 

ابتدا باید مقادیر بعضی از جدول های دیتابیس به decimal و یک عدد اعشاری مثل 17,2 تغییر کنن

در فایل Reed Me جدول هایی که باید تغییر کنن نوشته شده

واسه نمونه هم چند عکس قرار دادم

به عنوان مثال :

ps_product: quantity, minimal_quantity,out_of_stock

به جدول ps_product رفته و از تب Structure مقادیر quantity و minimal_quantity و out_of_stock را به Decimal و 17,2 تغییر میدیم

17,2 مثال هست و هر عدد اعشاری قابل قبوله، فقط دقت شود از , به جای . برای اعشار استفاده کنید

 

بعد از اینکه کلیه جدول ها تغییر دادیم نوبت به تغییر int به float هست

مطابق با فایل Read Me این تغییرات رو انجام میدیم

در آخر هم کش رو پاک میکنیم و تمام

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر

مشکلاتی که تا الان داره

1) جمع مقادیر کالا رو به درستی نشان نمیده،مثلا اگر 1.5+2.5+3.5= 7.5 کالا به سبد اضافه کنیم،مقدار 7 نشون میده

در عکس های زیر این مطلب واضح تر قابل مشاهده است

عکس 1

عکس 2

عکس 3

عکس 4

2) مقدار کالا در آفیس به صورت اعشاری نشون داده نمیشه

عکس 5

3) در ایمیلی که بعد از ثبت سفارش برای ما ارسال میشه عدد 2 به جای 2.5 نشون میده،ولی قیمت درسته

البته ایمیلی که به مشتری ارسال میشه کاملا درسته

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر

تغییرات جدیدی که دادم

themes\default-bootstrap\modules\blockcart\blockcart-json.tpl

خط 34

"quantity": {$product.cart_quantity|floatval},

با انجام این تغییر مقدار اعشاری بعد از اضاف کردن به سبد درست شد

عکس 1

عکس 2

 

themes\default-bootstrap\js\cart-summary.js

خط 880

nbrProducts += parseFloat(product_list.quantity);

بعد از انجام این تغییر عبارت محتويات سبد خريد شما:  محصولات فقط بعد از زدن + یا - در سبد خرید درست نشون میده

عکس قبل از زدن + یا -

عکس 3

عکس بعد از زدن + یا -

عکس 4

 

مشکل اصلی نشون ندادن مقدار اعشاری در بک آفیس هست که هنوز حل نشده

ولی قبلا به صورت تک رقمی بود،یعنی فقط مینوشت 5 عدد یا 2 عدد،الان مینویسه 5.00 یا 2.00

عکس 5

admin\themes\default\template\controllers\orders\_product_line.tpl

خط 78

	<td class="productQuantity text-center">
		<span class="product_quantity_show{if (float)$product['product_quantity'] > 1} badge{/if}">{$product['product_quantity']}</span>
		{if $can_edit}
		<span class="product_quantity_edit" style="display:none;">
			<input type="text" name="product_quantity" class="edit_product_quantity" value="{$product['product_quantity']|htmlentities}"/>
		</span>
		{/if}
	</td>

الان همه چی درسته جز 2 مورد

1) محتويات سبد خريد شما: x محصولات

2) نشان ندادن مقدار اعشاری در بک آفیس

 

مشکل 1 قابل چشم پوشیه ولی در مورد مشکل 2 هر پیشنهادی دارین ممنون میشم در میون بزارین

هر فایلی که به نظرتون میاد بفرمایید تغییر بدم

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر

کلیه مشکلات  با کمترین تغییرات حل شد

 

اضافه به سبد

خلاصه

پرداخت

تاریخچه سفارشات

بک آفیس

ایمیل ارسالی به کاربر

 

ReedMe.txt

فکر نکنم نیاز به توضیح خاصی داشته باشه

فقط دو فایل product.tpl و product.js بسته به نیازتون باید تغییر داده بشه

کدها جوری هست که میتونین در یه شاخه با افزایش استپ 0.5 کالا قرار بدین در یه شاخه 0.1 در یه شاخه 1 یا 2 یا هر عددی که لازم دارین

لینک به دیدگاه
به اشتراک گذاری در سایت های دیگر

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

در حال بارگذاری


  • کاربران آنلاین در این صفحه

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

×
×
  • اضافه کردن...