رفتن به مطلب
انجمن پشتیبانی لاراول ایران

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

Amir_Kh1984

کاربر
  • تعداد ارسال ها

    23
  • تاریخ عضویت

  • آخرین بازدید

  • Days Won

    5

Amir_Kh1984 last won the day on جون 4

Amir_Kh1984 had the most liked content!

اعتبار در انجمن

11 خوب

درباره Amir_Kh1984

  • درجه
    تازه وارد

آخرین بازدید کنندگان نمایه

183 بازدید کننده نمایه
  1. سلام همانطور که گفتم شما باید روابط یک به چند را برای جداول دسته بندی (categories) و تصاویر (images) و همچنین تصویر و برچسب (tags) را پیاده سازی نمایید. بعد از پیاده سازی آنها از کد زیر استفاده کنید تا در یک جدول مقادیر id و name و تصاویر و هم چنین برچسب ها(بدون تکرار) را نمایش دهد. <table> <tr> <th>id</th> <th>name</th> <th>images</th> <th>tags</th> </tr> @foreach($categories as $category) <tr> <td>{{ $category->id }}</td> <td>{{ $category->name }}</td> <td> @php $pics = []; @endphp @foreach($category->images()->pluck('src') as $src) $pics[] = $src; @endforeach {{ implode(',', $pics) }} </td> <td> @php $tags = []; @endphp @foreach($category->images()->get() as $image) @foreach($image->tags()->pluck('name') as $name) $tags[] = $name; @endforeach @endforeach {{ get_tags($tags) }} </td> </tr> @endforeach </table> تابع برای حذف عناصر تکراری از یک آرایه بصورت زیر تعریف شده است: function get_tags($tags) { $result = array(); for ($tags as $tag) { if (!in_array($tag, $result)) $result[] = $tag; } return implode(',', $result); } امیدوارم که این پاسخ مشکل شما را برطرف کرده باشد. موفق باشید.
  2. سلام لطفا کدهای سمت server را هم قرار دهید. در سمت server شما باید مقادیر success و data را ارسال کنید تا به آنها دسترسی داشته باشید. اگر شما بخواهید مقدار value و id را بازیابی کنید نیازی به ajax ندارید. به راحتی با یک دستور ساده jQuery می تواندید هر اطلاعاتی از صفحه را بدست آورید. اصولا زمانی از ajax استفاده می کنید که بخواهید اطلاعاتی را از بانک اطلاعاتی یا یک منبع خارجی (فایل json یا html و... ) استخراج کنید. وقتی شما id هر سطری را بصورت ایستا (static) به سطر (tr) نسبت دهید برای بازیابی آن به ajax نیازی نیست. اگر راجب هدفتون بیشتر توضیح دهید فکر می کنم بهتر بتونم کمک کنم. $('.quantity').change(function (e) { e.preventDefault(); var $this = $(this); var value = $this.val(); var id = $this.parents('tr').attr('id'); alert('value:' + value + ' id:' + id); }); موفق باشید.
  3. سلام اگر بخواهید برای یک دسته بندی (category) خاص تمامی تصاویر مرتبط با انرا بازیابی کنید باید از رابطه یک به چند بین دسته بندی و تصویر استفاده کنید. همین طور برای تصویر و برچسب (tag). اگر هدفتان بازیابی تمامی برچسب های متعلق به یک دسته بندی خاص باشد(جدول تصویر به عنوان واسط) می توانید از رابطه HasManyThrough در مدل Category استفاده کنید. البته می توانید از هر دوی آنها بصورت همزمان استفاده کنید.در حالت کلی بسته به نیازتان می توانید از این روابط استفاده کنید. برای مثال اگر جدول categories شما ستون های id، name، slug و parent داشته باشد و بخواهید از دسته بندی های تو در تو (یک سطحی و یا چند سطحی) استفاده کنید، می توانید یک رابطه یک به چند در داخل مدلCategory تعریف کنید. فرضا اگر بخواهید تمام دسته بندی هایی که زیر مجموعه یک دسته بندی خاص هستند را بدست آورید می توانید تابع children را بصورت زیر تعریف کنید: public function children () { return $this->hasMany(Category::class, 'parent'); } در صورتیکه شما برای یک دسته بندی خاص تابع را فرخوانی کنید، تمام دسته بندی هایی که مقدار فیلد parent آنها با فیلد id دسته بندی مورد نظر برابر باشد، بازیابی می شود. در قطعه کد زیر فرض بر آن است که هر دسته بندی حداکثر یک زیر مجموعه دارد.(پیاده سازی دسته بندی های چند سطحی با استفاده از توابع بازگشتی امکان پذیر است که خارج از حوصله این پست است) <ul> @foreach($categories As $category) <li id='{{ $category->id }}'>{{ $category->name }} @if($category->children) @php $sub_cats = $category->children()->select('id', 'name')->get(); @endphp <ul> @foreach($sub_cats As $sub_cat) <li id='{{ $sub_cat->id }}'>{{ $sub_cat->name }}</li> @endforeach </ul> @endif </li> @endforeach </ul> امیدوارم که این پاسخ مشکل شما را برطرف کرده باشد. موفق باشید.
  4. سلام برای راست چین کردن قالب شما باید دانش کافی در زمینه CSS داشته باشید. اگر از Bootstrap استفاده می کنید باید فایل راست چین شده آن را به صفحه خود اضافه کنید.(البته بعد از اضافه کردن فایل bootstrap.min.css) با یک جستجو می توانید فایل راست چین شده بوت استرپ را پیدا کنید. ثانیا شما باید خود قالب را راست چین نمایید. معمولا اگر خاصیت float عنصری را به right تغییر دهید و تنظیماتی از این قبیل (تغییر margin ، padding ، border-radius و ..... ) به راحتی می توانید قالب را راستچین نمایید. یک فایل راست چین شده بوت استرپ را برای شما قرار دادم. امیدوارم که این پاسخ مشکل شما را حل کرده باشد. موفق باشید. rtl.zip
  5. ابتدا حافظه cache مرورگر را پاک کنید. php artisan config:cache در صورت عدم حل مشکل، فرم را در جای دیگری (صفحه دیگر) قرار دهید و مجددا امتحان کنید. یا اینکه به جای متد post از متد get استفاده کنید و نتیجه را بررسی کنید. کلا باید با سعی و خطا مشکل را حل کنید. بازهم تاکید می کنم که فرم شما هیچ مشکلی نداره!!! مشکل از جای دیگه است..... درگیر شدن با خطا ها لازمه یادگیری و کسب مهارت در برنامه نویسی است.....
  6. سلام منظور شما از "کار نمیکنه" دقیقا چیه؟ آیا اطلاعات فرم به سرور ارسال می شوند؟ چرا خاصیت action فرم را برابر با www.google.com قرار دادید؟ (هر چند که این مقدار باعث این مشکل [عدم ارسال فرم] نشده!!) آیا خطایی از سمت لاراول دریافت می کنید؟ ظاهرا فرم شما هیچ مشکلی نداره!! احتمالا مشکل از جای دیگه هست. کلا برای ارسال اطلاعات با فرم شما ابتدا باید مسیر (route) مربوطه را تعریف و در قسمت action فرم مقدار انرا تنظیم نمایید. لطفا سوال را با جزئیات بیشتری مطرح کنید.
  7. سلام ابتدا مسیر (route) درخواست را بصورت زیر تغییر دهید. Route::get('/regist', function (Illuminate\Http\Request $request) { if($request->ajax()) return \Illuminate\Support\Facades\Response::json($request->all()); return \Illuminate\Support\Facades\Response::json(false); }); توضیح اینکه اولا از متد get استفاده کنید. ثانیا شی request$ را به عنوان آرگومان تابع (Closures) قرار دهید. حال تابع ajax را بصورت زیر ویرایش کنید. $.ajax( { type : 'get', url : "{{ url('/regist') }}", data : { fname : fname }, success : function(data) { alert(data.fname); } }); از متد get استفاده کنید و در بدنه تابع success با استفاده از آرگومان data فقط به مقادیری دسترسی خواهید داشت که آنها را به سرور ارسال کردید.(کاملا مشخه که دسترسی به مقداری که وجود نداره undefined هست!) امیدوارم که این پاسخ مشکل شما را برطرف کرده باشد. موفق باشید.
  8. اگر بخواهید با هر بار کلیک به تعداد محصول یک واحد اضافه بشه باید از کد زیر استفاده کنید. if(!isset($cart[$id])) { $cart[$id] = [ "id" => $id, "title" => $product->title, "price" =>$product->price, "quantity" => 1 ]; session()->put('cart', $cart); } else { $cart = session()->get('cart'); $cart[$id]['quantity']++; session()->put('cart', $cart); } ضمنا هر طوری که شما بخواهید می توانید سبد خرید را پیاده سازی کنید. می توانید همانند سایت های خرید انلاین بعد از افزودن محصول به سبد خرید قسمتی را برای افزایش یا کاهش تعداد محصول قرار دهید. امیدوارم که این پاسخ مشکل را برطرف کرده باشد. موفق باشید.
  9. سلام ابتدا باید وجود یا عدم وجود session را بررسی کنید. در صورت موجود نبون آنرا ایجاد کنید. if (!session()->get('cart')) session()->put('cart', []); $cart = session()->get('cart'); حال باید بررسی کنید که آیا محصول جدید در سبد خرید وجود دارد یا خیر؟ if(!isset($cart[$id])) { $cart[$id] = [ "id" => $id, "title" => $product->title, "price" =>$product->price, "quantity" => 1 ]; session()->put('cart', $cart); } فکر کنم مشکل کد شما این باشه که session بنام sessionBasket را ایجاد نکردید!!! من از همین کدهای فوق در سبد خرید پروژه خودم استفاده کردم و نتیجه گرفتم. برای حذف یک محصول از سبد خرید هم می توانید از کد زیر استفاده نمایید. if(isset($cart[$id])) { $cart = session()->get('cart'); unset($cart[$id]); // update session session()->put('cart', $cart); if (!sizeof($cart)) { session()->put('cart', []); session()->forget('cart'); } } امیدوارم که این پاسخ مشکل شما را حل کرده باشد. موفق باشید.
  10. با سلام آیا منظور شما از "اپدیت دیتابیس" این هست که در هنگام بازیابی داده ها در Controller مدنظر با این خطا مواجه می شوید؟؟ در صورت مثبت بودن پاسخ شما باید داده هایی را که از پایگاه داده دریافت کردید، را اعتبار سنجی نمایید. برای مثال فرض کنید می خواهید نوشته ای (post) با شناسه (id) یک را از بانک اطلاعاتی بازیابی کنید. می توانید از کدی شبیه زیر استفاده کنید. دقت کنید که بعد از دریافت اطلاعات، مقدار post$ بررسی شده در صورت عدم وجود(null بودن) به صفحه خطای 404 هدایت می شوید. $post = DB::table('posts')->find(1); if (!$post) abort(404); return view('front.post', compact('post')); کلا زمانیکه شما بخواهید به مقدار خاصیت (property) یک شی (Object) که وجود ندارد،(مقدار شی برابر null است) دسترسی داشته باشید با چنین خطایی مواجه می شوید. امیدوارم که این پاسخ مشکل شما را حل کرده باشد.
  11. سلام شما برای این کار باید یک میان افزار (Middleware) ایجاد نمایید. سپس برای تمامی مسیرها (Route) از این میان افزار استفاده کنید. با استفاده از artisan یک میان افزار به نام CheckLogin ایجاد نمایید. php artisan make:middleware CheckLogin میان افزار ایجاد شده را در مسیر app/Http/Kernel.php در انتهای آرایه routeMiddleware$ با نام اختیاری check-login ثبت (Register) نمایید. 'check-login' => \App\Http\Middleware\CheckLogin::class, حال از route های زیر در web.php استفاده نمایید. Auth::routes(); // for home page Route::get('/', 'HomeController@index')->name('home'); Route::middleware('check-login')->group(function() { // insert all routes here // for example.... Route::get('/faq', 'HomeController@faq')->name('home.faq'); Route::get('/search/tag/{tag}', 'SearchController@tag')->name('home.tag'); }); در انتها کافی است متد ()handle را به صورت زیر ویرایش کنید. public function handle($request, Closure $next) { return redirect()->to('login'); } حال کاربر به جز صفحه اصلی سایت، به تمامی صفحات سایت بدون لاگین دسترسی ندارد. امیدوارم که این پاسخ مشکل شما را حل کرده باشد.
  12. برای اجرای کوئری مد نظر ابتدا یک migration ایجاد و آنرا migrate نمایید. سپس بدنه تابع ()up را پاک و به جای آن کد زیر را قرار دهید. public function up() { $statement = "ALTER TABLE table_name AUTO_INCREMENT = 1000"; \Illuminate\Support\Facades\DB::unprepared($statement); } بعد از اجرا، مقدار ستون id با مقدار اولیه 1000 شروع می شود. من در لاراول نسخه 6 کد بالا را آزمایش کردم و جواب گرفتم. برای اطلاع بیشتر می توانید به پیوند زیر مراجعه نمایید. https://stackoverflow.com/questions/34196045/set-auto-increment-field-start-from-1000-in-migration-laravel-5-1 در مورد کوئری اول هم می توانید از دستور زیر استفاده نمایید. $records = DB::select('select * from user'); var_dump(records); // using parameter $records = DB::select('select * from user where id = ?', [3]); var_dump(records); امیدوارم که این پاسخ ها مشکل شما را حل کرده باشد. موفق باشید.
  13. فایل fa.js در مسیر src/langs قرار دارد که به طور پیش فرض مقدار خاصیت dir_ به rtl تنظیم شده است. لذا نیازی به قرار دادن کد مدنظر نیست. اما در صورت نیاز می توانید آنرا بعد از استفاده از متد ()trumbowyg قرار دهید. من این ویرایشگر را دانلود کردم و مشکلی در راستچین کردن آن نداشتم. تمام منوها در سمت راست ظاهر شدند و نوشتی ها هم راستچین شدند.(حتما خاصیت direction تگ body را برابر rtl قرار دهید) پیشنهاد می کنم از ویرایشگرهای معروفی مثل CKEditor یا TinyMCE استفاده کنید که خیلی راحت تر می توانید با انها کار کنید. موفق باشید.
  14. ابتدا زبان را به فارسی تغییر دهید. $('textarea').trumbowyg({ lang: 'fa' }); سپس direction را بصورت زیر تنظیم نمایید. jQuery.trumbowyg.langs.fa = { _dir: "rtl" // Changes the editor dir }; پیشنهاد می کنم برای پاسخ هر سوالی به مستندات سایت رجوع کنید. چون بهترین منبع برای یادگیری همان سایت اصلی است. منبع : https://alex-d.github.io/Trumbowyg/documentation/#add-localization
  15. با استفاده از دستور dd($request) می توان تمام اطلاعات شی request$ را بدست آورد. برای بازیابی هر یک از خواص آن از چه متدی باید استفاده کرد؟ من قصد دارم در تابع handle میان افزار CheckRole با بدست آوردن مقدار خاصیت requestUri پردازشی انجام دهم. (اگر کاربر معمولی لاگین کرده اجازه دسترسی به پنل مدیریت ادمین را به کاربر معمولی ندهد) سوال دیگر اینکه آیا بررسی این موضوع باید در همین میان افزار انجام شود؟
×
×
  • جدید...