مصطفی
4 سال پیش توسط مصطفی مطرح شد
13 پاسخ

دریافت اطلاعات foreach در ویو بدون رفرش شدن صفحه

سلام دوستان.وقتتون بخیر.
توی لیست محصولات میخوام هر 10 دقیقه قیمت محصول از جدول محصولات خونده بشه و بدون اینکه صفحه رفرش بشه قیمت محصول به روز بشه.محصولات رو از طریق ی foreach دارم به کاربر نمایش میدم

foreach($products as $product)
{{$product->id}}
{{$product->name}}
{{$product->price}}
endforeach

ممنون میشم راهنمایی کنین چجوری اینکار رو انجام بدم
@mohaligateway
@muhammad
@ali.bayat
@hesammousavi
@mrn
@juza66


ثبت پرسش جدید
فرشید مرادی
تخصص : noob
@eniack 4 سال پیش آپدیت شد
1

سلام وقت بخیر ، من یه راه حل ساده و کاربردی واسه این سوال شما دارم:
چرا شما دوباره محصول رو بگیری از دیتابیس؟ فقط کافیه اون دیوی ک محصولات رو نمایش میده رفرش کنی(همون جایی که foreach قرار داره) به این صورت

$('.parent').load(document.URL + ' #wrapper);

داخل این کد parent دیو بالایی محصولات هست و wrapper دیو اصلی ماست که محصولات رو نمایش میده شما یک interval بزار مثلا ۵ ثانیه ای و کد بالا رو داخل این interval بزار و یک محصول اضافه کن به دیتابیس


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
0

سلام میتونی با تابع setInterval در جاوا اسکریپت این کارو انجام بدی در این تابع که زمان اجراشو مشخص میکنی در بازه های زمانی خاصی اجرا میشه و میتونی با ایجکس لیست محصولاتو دریافت و نشون بدی.
یه سرچ در باره نحوه کار کرد تابع setInterval انجام بده.
میتونی لیست کل محصولاتو بگیری یا فقط قیمتهارو بخونی که خوندن فقط قیمت ها مقداری پیچیده تره.
راه آسونش اینه لیست کامل محصولو در ده دقیقه بگیری با foreach نمایشش بدی.


Muhammad
تخصص : Back-End Developer
@muhammad 4 سال پیش مطرح شد
-3

سلام شب به‌خیر.

کی توی سایت 10 دقیقه منتظر می‌مونه تا نیاز به چنین کاری باشه؟
اگه نیاز بود باید با جاواسکریپت، ریکوست HTTP بفرستین یا از Socket استفاده کنین. راه اول اوکی و راحته: یه ریکوست می‌زنین و لیست محصولات رو می‌گیرین، بعد با دستکاری DOM اون باکس رو آپدیت می‌کنین. اولین بار foreach داخل blade رو استفاده کردین ولی بعدش دیگه کارایی نداره چون با جاواسکریپت ریفرش میشه.


مصطفی
@alavi.it88 4 سال پیش مطرح شد
1

@hosseinshirinegad98
مهندس ممنون میشم اگر آموزش خوبی در این مورد داری بهم بدی؟ setInterval این رو توی چندتا از آموزش ها دیدم ولی نحوه ای که بخواد فقط اون foreach آپدیت بشه رو نفهمیدم.


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
0

ببینید همانطور که در بالا اشاره شد هیچ کس به مدت ده دقیقه در یه صفحه محصولات نمیمونه و شاید انجام چنین کاری اشتباه محض باشه ولی ایرادی نداره طریق انجامشو یاد بگیری بد نیست.
شما باید اون foreach رو به تنهایی برداری ببری تو یک ویو و بجاش از دستور include برای ایمپورت کردن اون foreach استفاده کنی و در دفعات بعد هم با ایجکس اون ویوی foreach رو سر جاش بزای. کافیه یه المنت دور foreach بزاری و با ایجکس ویوی موردنظرو برگردونی و قرارش بدی تو اون تگه.
اگه لازم داری یه نمونه کد برات ارسال کنم


مصطفی
@alavi.it88 4 سال پیش مطرح شد
1

@hosseinshirinegad98 نیکی و پرسش مهندس جان اگر یک نمونه بدی ممنون میشم.در مورد اون 10 دقیقه مهندس اصلا این چیزی که گفتم نیست چیزی که مد نظرمه یک اپ تحت وبه و اصلا محصول نیست من برای اینکه ملموس تر و باشه و درگیر توضیحات اون سمت نشیم گفتم محصول که زودتر به مقصود برسم


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
0

اجازه بده تو سیستم پیادش کنم بعد نمونه کدشو برات میفرستم


مصطفی
@alavi.it88 4 سال پیش مطرح شد
1

@hosseinshirinegad98 ممنون مهندس خیلی خیلی لطف می کنین


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش آپدیت شد
1

روت خوندن اطلاعات :

Route::get('products', 'ProductController@products');

کدهای کنترلر

class ProductController extends Controller
{
    public function products()
    {
        $products = Product::orderBy('id', 'DESC')->get();

        return view('products', compact('products'));
    }
}

ویوی برنامه با نام : products.blade.php

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <meta name="CSRF-TOKEN" content="{{ csrf_token() }}">
    <title>Document</title>
    <link rel="stylesheet" type="text/css" href="{{url('css/app.css')}}">
</head>
<body>
    <div id="products">
        @if($products->count())
            <table class="table table-bordered">
                <thead>
                    <tr>
                        <th>عنوان</th>
                        <th>قیمت</th>
                    </tr>
                </thead>
                <tbody>
                    @foreach($products as $product)
                        <tr>
                            <td>{{$product->title}}</td>
                            <td>{{ $product->price }}</td>
                        </tr>
                    @endforeach
                </tbody>
            </table>
        @else
            <p class="alert alert-warning">محصولی برای نمایش یافت نشد</p>
        @endif
    </div>
</body>
</html>

<script src="{{url('js/jquery-2.1.1.min.js')}}"></script>
<script>
        setInterval(function() {
            $("#products").load(document.URL+ ' table');
        }, 600000); 
</script>

600000 معادل 10 دقیقه


فرشید مرادی
تخصص : noob
@eniack 4 سال پیش آپدیت شد
1

سلام وقت بخیر ، من یه راه حل ساده و کاربردی واسه این سوال شما دارم:
چرا شما دوباره محصول رو بگیری از دیتابیس؟ فقط کافیه اون دیوی ک محصولات رو نمایش میده رفرش کنی(همون جایی که foreach قرار داره) به این صورت

$('.parent').load(document.URL + ' #wrapper);

داخل این کد parent دیو بالایی محصولات هست و wrapper دیو اصلی ماست که محصولات رو نمایش میده شما یک interval بزار مثلا ۵ ثانیه ای و کد بالا رو داخل این interval بزار و یک محصول اضافه کن به دیتابیس


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
0

سلام مرسی
استفاده شد.
@eniack


مصطفی
@alavi.it88 4 سال پیش مطرح شد
1

آقا خیلی خیلی ممنون.
@hosseinshirinegad98
@eniack
مهندس فقط مشکلی که خوردم اینه که من دارم از data table استفاده می کنم و بعد از اولین برروز رسانی سرچ و پیج بندی data table از بین میره.راه حلی برای این قضیه هست؟


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
0

راحلش اینه که پارامترهای سرچو به لینکهای صفحه بندی بچسبونی.
در مورد متد appends در لاراول یه تحقیقی بکن یا متد withQueryString
و همینطور withPath با این متد ها میتونی پارامترهای سرچو به آخر لینک های صفحه بندی اضافه کنی .
سرچی بزنی کار دستت میاد . انگلیسی هم سرچ کن


مصطفی
@alavi.it88 4 سال پیش مطرح شد
1

@hosseinshirinegad98
مهندس appends تا جایی که می دونم مال زمانیه که از پجینیت خود لاراول استفاده کنی.
من الان از data table استفاده کردم و منظورم از رفتن سرچ و پیج بندی محو شدن باکس سرچ و دکمه های پجینیت هست.
تو data table اصلا پارامتری به آخر لینک های صفحه بندی اضاف نمیشه که که بخوام withPath کنمش.
به هر حال خیلی خیلی ممنون تا همینجا هم خیلی لطف کردین.کلی کارمو راه انداختین.


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام