مشکات
2 سال پیش توسط مشکات مطرح شد
40 پاسخ

تابع isActiveبرای منو در لاراول

سلام خسته نباشید

<?php
if (! function_exists('isActive')){
    function isActive($key , $activeClassName = 'active'){
        if (is_array($key)){
            return in_array(\Illuminate\Support\Facades\Route::currentRouteName() , $key ) ? $activeClassName : '' ;

        }

        return \Illuminate\Support\Facades\Route::currentRouteName() == $key ? $activeClassName : '' ;
    }
}
 <li class="nav-item has-treeview {{isActive(['phone-book.create' , 'phone-book.show'] , 'menu-open')}}">
              <a href="#"  class="nav-link phone-book {{ isActive(['phone-book.create','phone-book.show']) }}">
                <i class="nav-icon fa fa-table"></i>
                <p>
                  دفترچه تلفن
                  <i class="fa fa-angle-left right"></i>
                </p>
              </a>
              <ul class="nav nav-treeview">
                <li class="nav-item has-treeview">
                  <a href="#"  class="nav-link">
                    <p>
                       دفترجه تلفن ها
                      <i class="fa fa-angle-down right"></i>
                    </p>
                  </a>
                </li>
                @foreach($phoneBooks as $phoneBook)
                <li class="nav-item">

                  <a href="{{ route("phone-book.show",["phone_book" => $phoneBook->getId() ]) }}" class="nav-link {{isActive("phone-book.show")}}">
                    {{-- <i class="fa fa-circle-o nav-icon"></i> --}}
                    {{-- <span class="glyphicon glyphicon-chevron-left"></span> --}}
                    <span class=""><img src="{{ url("dist/img/icons8-phone-book-48.png") }}" alt="" style="width:20px;height:20px"></span>
                    <p>{{$phoneBook->getName() }}</p>

                  </a>
                </li>
                @endforeach
                <li class="nav-item">
                  <a href="{{ route("phone-book.create")}}" class="nav-link {{ isActive('phone-book.create') }} ">
                    {{-- <i class="fa fa-circle-o nav-icon"></i> --}}
                    <i class="nav-icon fa fa-plus"></i>
                    <p>ایجاد دفترچه تلفن</p>
                  </a>
                </li>
              </ul>
            </li>

توضیح تصویر رو وارد کنید

چطوری میتونم این مشکلو حل کنم که همشون با هم اکتیو نشن؟؟
ممنون میشم راهنماییم کنید


ثبت پرسش جدید
محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 2 سال پیش مطرح شد
0

ببینید
اشتباه اولتون اینه ک چیزی ک ارسال میکنید رو توی متدتون dd نمیگیرید همشو دونه دونه ببینید خروجی و جواب چیه و چرا کار نمیکنه

url مثل چیزی ک فرستادید خودتون کامل میاد localhost/8000 رو هم ارسال میکنه

\URL::route('home', [], false)

به این شکل به جای url توی ویو از این متد استفاده کنید

و لطفا لطفا در تمام مراحل خروجی و رشته و مقایسه رو چک کنید و مشکل رو سرچ کنید گوگل

من زدم

get route name uri

و این هم نتیجه سایتی که آورد

بیشتر جنبه راهنمایی کلی داشت ک مشکلتون سر نوع چک کردن بود بقیش رو تلاش کنید پیدا کنید چون پیدا کردن مشکل و سرچ کردن اصلی ترین بخش برنامه نویسی هست.

البته فک کنم مشکلتون برطرف بشه با این قطعه اخری که فرستادم
اما کلی عرض کردم خدمتتون که سرچ خیلی مهمه.


Sahandi81
تخصص : PHP - Laravel -JS
@sahandi81 2 سال پیش مطرح شد
0

احتمالا اسم گذاری روت هات اشتباهه
کد های web.php رو هم بذار


مشکات
تخصص : کاراموز
@meshkat315 2 سال پیش مطرح شد
0

سلام @sahandi81
ممنونم ک پاسخ دادین

Route::post('/phonebook/{phonebook}', [App\Http\Controllers\IndexController::class, 'show'])->name('phonebook.show')->withoutMiddleware(['auth','web']);

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


محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 2 سال پیش مطرح شد
0

سلام
متد شما درست هست من هم ازش استفاده کردم قبلا مشکلی نداره (از آموزش مهندس موسوی)
ولی شما توی ساید بارتون اکثر جاهاش فراخوانی کردید این اکتیو رو
تفاوت حالتی که منو باید باشه چیزی که انتظار دارید خودتون رو با route مد نظر در هر دو حالت create و show نمایش بدید
من فک میکنم اشکال از view باشه و نحوه استفاده در بخش های مختلف

شما توی حلقه به همشون گفتید اگر route این بود بیا و فعال باش
خب ب نظر نحوه قرار دادنشون مشکل داره
یک روت برای همه ی اون ها توانایی فعال کردن رو داره

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

حالت غیر فعالش رو ک مد نظر هست رو هم قرار بدید و روتی ک باید وقتی باز مبشه و دقیقا چیزی ک میخوایید فعال باشه رو بیشتر توضیح بدید

در پایان معمولا ساید بار در رابطه با صفحاتی هست ک طراحی شده و کار هایی رو انجام میده
معمولا به صورت static نوشته میشه کامل و بعد اگر سطح دسترسی ای وجود داره از gate ها و بقیه موارد استفاده میشه برای مدیریتش

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

چون الان برای چند بخش مختلف هم اگر بخوان شماره بردارن باید درخواست بره به صفحه ی دیگه ای و کسی که کارش مثلا تو شرکت منشی باشه و بخواد همش زنگ بزنه به اینو اون مجبوره هی جابه جا بشه توی صفحات.

باز هم میگم دلخواه هست ایده ی کارتون و فقط ب عنوان نظر بود


مشکات
تخصص : کاراموز
@meshkat315 2 سال پیش آپدیت شد
0

سلام @salar.mohammad2013
بی اندازه ممنونم ازتون ک وقت گذاشتین و انقدر کامل توضیح دادین🌺☘️
احساس میکنم باید بشه اینی ک میخوام رو پیاده سازی کرد
ببینید

    @foreach($phoneBooks as $phoneBook)
                <li class="nav-item">

                  <a href="{{ route("phone-book.show",["phone_book" => $phoneBook->getId() ]) }}" class="nav-link {{isActive("phone-book.show")}}">
                    {{-- <i class="fa fa-circle-o nav-icon"></i> --}}
                    {{-- <span class="glyphicon glyphicon-chevron-left"></span> --}}
                    <span class=""><img src="{{ url("dist/img/icons8-phone-book-48.png") }}" alt="" style="width:20px;height:20px"></span>
                    <p>{{$phoneBook->getName() }}</p>

                  </a>
                </li>
                @endforeach

من الان یک loop دارم که میخوام توی اون loopبگم بصورت داینامیک روی هر کدوم از دفترجه تلفن ها کلیک کرد،فقط اون دفترچه تلفن مورد نظر اکتیو بشه ب جای اینکه همشون با هم اکتیو بشن
نمیدونم اینو باید چطوری انجام بدم
من باز هم از شما ممنونم بخاطر توضیحات کاملتون 🙏🌸


مشکات
تخصص : کاراموز
@meshkat315 2 سال پیش مطرح شد
0

@salar.mohammad2013

  @foreach($phoneBooks as $phoneBook)
                <li class="nav-item">
                  <a href="{{ route("phone-book.show",["phone_book" => $phoneBook->getId() ]) }}" class="nav-link {{$loop->first ? 'active' : '' }}">
                    {{-- <i class="fa fa-circle-o nav-icon"></i> --}}
                    {{-- <span class="glyphicon glyphicon-chevron-left"></span> --}}
                    <span class=""><img src="{{ url("dist/img/icons8-phone-book-48.png") }}" alt="" style="width:20px;height:20px"></span>
                    <p>{{$phoneBook->getName() }}</p>

                  </a>
                </li>
                @endforeach

اینو ببینید لطفا
الان وقتی از $loop->first استفاده کردم اولیشو فعال کرد
میخوام این حالت برای بقیشون هم انجام بشه

توضیح تصویر رو وارد کنید


محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 2 سال پیش مطرح شد
0

شما برای همه ی دفترچه تلفن ها روت phone book show رو دادید
خب وقتی یکی فعال بشه ب نظر خودتون بقیه فعال نمیشه؟
مگر اینکه نام روت قابلیت مدل بایندیگ داشته باشه که مثلا اون مدل phonebook خودتون که به route دادید رو به نام هم بتونید بدید که نام یکتایی بهتون بده ک فک نمیکنم باشه

به جاش تابع is active رو باید عوض کنی
به جای route name باید از خود url کمک بگیری و url مورد نیاز رو برای چک پاس بدی بهش و بررسی کنی
مستندات دریافت url
حتی با یه if ساده هم میتونی تست کنی
فقط یکم باید وقت بزاری بخش مورد نیازتو از آدرس حذف کنی و چک کنی که همون دفتر تلفن هست یا نه که بیایی active کنی
چون route name شما برای همه ی دفتر تلفن هات نام یکسان داره و نمیتونی ازش استفاده کنی اینجوری


مشکات
تخصص : کاراموز
@meshkat315 2 سال پیش مطرح شد
1

@salar.mohammad2013
متوجه شدم
ی عااااالمه ممنونم از راهنماییتون
الان میرم ب اینصورتی ک گفتین سرچ میکنم تا بتونم انجامش بدم و ب جواب برسم
خیلی خیلی ممنونم
اگر اوکی شد بهتون میگم


محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 2 سال پیش مطرح شد
0

خواهش میکنم
موفق باشید.


مشکات
تخصص : کاراموز
@meshkat315 2 سال پیش مطرح شد
0

سلام@salar.mohammad2013
ببخشید من تابع isActive رو به اینصورت نوشتم
در سمت بلید هم urlهارو پاس دادم به تابع isActive اما درست کار نکرد😥

<?php
if (! function_exists('isActive')){
    function isActive($key , $activeClassName = 'active'){
        if (is_array($key)){
            return in_array(\Illuminate\Support\Facades\URL::current() , $key ) ? $activeClassName : '' ;

        }
        return  \Illuminate\Support\Facades\URL::current() == $key ? $activeClassName : '' ;
    }
}

محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 2 سال پیش مطرح شد
0

سلام
توی همین is_active
dd بگیرید مقدار

\Illuminate\Support\Facades\URL::current()

و مقدار

$key

و مقدار

in_array(\Illuminate\Support\Facades\URL::current() , $key )

ببینید چی داره با چی مقایسه میشه


مشکات
تخصص : کاراموز
@meshkat315 2 سال پیش آپدیت شد
0

@salar.mohammad2013
\Illuminate\Support\Facades\URL::current() مقدارش یک url هستhttp://localhost:8000/users
ولی مقداری $key برابره با users
🤓


محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 2 سال پیش آپدیت شد
0
\Illuminate\Support\Facades\Request::getRequestUri()

از این استفاده کن

دامنه ی اصلی رو حذف میکنه و درخواست رو میده بهت یعنی فقط user


مشکات
تخصص : کاراموز
@meshkat315 2 سال پیش آپدیت شد
0

توضیح تصویر رو وارد کنید

توی isActive نمیشناسه این متد رو

ای وااای نکنه باید توی بلیدم ازش استفاده کنم


محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 2 سال پیش آپدیت شد
0

اشکال نداره dd بگیری میبینی کار میکنه
phpstorm نمیشناسه

جای درستی قرار دادی همینجا منظورم بوده ک گذاشتی


مشکات
تخصص : کاراموز
@meshkat315 2 سال پیش مطرح شد
1

@salar.mohammad2013
چشم الان درستش میکنم
واقعا ممنونم ازتون


مشکات
تخصص : کاراموز
@meshkat315 2 سال پیش مطرح شد
0

ببخشید آقای @salar.mohammad2013 بزرگوار
اینو ببینید
برای قسمت اول کدم گذاشتمش ولی کار نمیکنه

 <li class="nav-item has-treeview  {{ isActive([url('users') ,url('users.create') ,url('users.edit') ], 'menu-open')}}">
                  <a href="{{ route('users')}}"  class="nav-link users {{ isActive([url('users') ,url('users.create') ,url('users.edit') ]) }}">

                      <i class="nav-icon fa fa-users"></i>
                      <p>
                          مخاطبان
                          <i class="right fa fa-angle-left"></i>
                      </p>
                  </a>
                  <ul class="nav nav-treeview">
                          <li class="nav-item">
                              <a href="{{ route('users') }}" class="nav-link {{ isActive(url('users')) }} ">
                                  <i class="fa fa-circle-o nav-icon"></i>
                                  <p>لیست مخاطبان</p>
                              </a>
                          </li>
                          <li class="nav-item">
                              <a href="{{ route('users.create') }}" class="nav-link {{ isActive(url('users.create')) }} ">
                                  <i class="fa fa-circle-o nav-icon"></i>
                                  <p>افزودن مخاطب جدید</p>
                              </a>
                          </li>
                  </ul>
              </li>

ببخشید انقدر سوال پرسیدم ازتون و اذیتتون کردم ولی ب جواب نرسیدم
شرمنده


محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 2 سال پیش مطرح شد
0

ببینید
اشتباه اولتون اینه ک چیزی ک ارسال میکنید رو توی متدتون dd نمیگیرید همشو دونه دونه ببینید خروجی و جواب چیه و چرا کار نمیکنه

url مثل چیزی ک فرستادید خودتون کامل میاد localhost/8000 رو هم ارسال میکنه

\URL::route('home', [], false)

به این شکل به جای url توی ویو از این متد استفاده کنید

و لطفا لطفا در تمام مراحل خروجی و رشته و مقایسه رو چک کنید و مشکل رو سرچ کنید گوگل

من زدم

get route name uri

و این هم نتیجه سایتی که آورد

بیشتر جنبه راهنمایی کلی داشت ک مشکلتون سر نوع چک کردن بود بقیش رو تلاش کنید پیدا کنید چون پیدا کردن مشکل و سرچ کردن اصلی ترین بخش برنامه نویسی هست.

البته فک کنم مشکلتون برطرف بشه با این قطعه اخری که فرستادم
اما کلی عرض کردم خدمتتون که سرچ خیلی مهمه.


مشکات
تخصص : کاراموز
@meshkat315 2 سال پیش مطرح شد
0

@salar.mohammad2013
مچکرم مچکرم مچکرم
چشم چشم چشم


محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 2 سال پیش مطرح شد
0

خواهش خواهش خواهش
بی بلا بی بلا بی بلا


مشکات
تخصص : کاراموز
@meshkat315 2 سال پیش مطرح شد
1

@salar.mohammad2013
درست شد
از صمیم قلبم از خدا میخوام ب علمتون برکت بده
ممنونم بابت وقتی ک گذاشتین صبرتون و علمتون
ممنووووونم🌺🌺🌺☘️


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

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