در نسخه ۶ نرم افزار whmcs تغییرات زیادی ایجاد شده که یکی از آنها تغییر نوع مدیریت منوها در قالب های پیشفرض این سیستم است. در نسخه های ۵ و ماقبل منوهای ناحیه کاربری از طریق ویرایش فایل های قالب مثل header.php و … امکانپذیر بود اما در نسخه ۶ منوهای whmcs باید از طریق Hook ها مدیریت شوند.
منوهای navigation بالای سایت و همچنین منوهای کناری Sidebar همه بوسیله Hook باید مدیریت، ویرایش و حذف و اضافه شوند و این به معنای این است که شما باید دستی در برنامه نویسی داشته باشید. در این مطلب سعی می کنیم تا حدودی شما را با چگونگی انجام اینکار آشنا کنیم.
البته در این مطلب به منوهای Navigation می پردازیم و در فرصتی دیگر و در صورت نیاز مطلبی در مورد منوهای کناری خواهیم نوشت. اما روش کار در کل یکسان است.
جهت حذف یا ویرایش هر منو ابتدا باید نام منوی مورد نظر را پیدا کنید. هر منویی یک نام منحصر بفرد باید داشته باشد. نام هر منو را با بررسی سورس html صفحه ناحیه کاربری می توانید پیدا کنید. گزینه inspect elements در مرورگر ها هم می تواند کمک کند. به عنوان مثال در تصویر زیر مقدار menuitemname برای منوی اخبار یا Announcements را مشاهده می کنید.
ساختار منوها بصورت درختی می باشد یعنی همانطور که در تصویر مشاهده می کنید منوی Announcements زیر مجموعه ای از منوی Support است. بنابراین لازم است شما برای هر منویی که قصد ویرایش دارید نام مجموعه بالایی آن را هم پیدا کنید.
تغییر عنوان منو
عنوان هر منو به راحتی از فایل زبان مورد استفاده قابل تغییر است، مثلا شما در فایل زبان فارسی به راحتی می توانید عنوان منوی “اخبار” را به کلمه “اطلاعیه ها” تغییر دهید. اما می توانید همین کار را هم از طریق Hook انجام دهید که بخاطر سادگی آن را مثال می زنیم تا با کارکرد هوک ها کمی آشنا شوید.
ابتدا یک فایل بنام custom-menus.php بسازید و کد زیر را داخل آن قرار دهید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php use WHMCS\View\Menu\Item as MenuItem; add_hook('ClientAreaPrimaryNavbar', 1, function (MenuItem $primaryNavbar) { $navItem = $primaryNavbar->getChild('Support'); if (is_null($navItem)) { return; } $navItem = $navItem->getChild('Announcements'); if (is_null($navItem)) { return; } $navItem->setLabel('عبارت دلخواه شما'); }); |
همانطور که مشاهده می کنید این کد ابتدا وارد منوی Support را و سپس وارد منوی Announcements که یک child از آن است می شود و در نهایت label منو را به عبارت دلخواه تغییر می دهد. حال کافیست این فایل را در آدرس /includes/hooks پوشه whmcs خود کپی کنید تا اثر آن را مشاهده نمایید.
تغییر صفحه هدف یک منو
بسیاری از افراد از سیستم های مدیریت محتوا مانند وردپرس برای سایت خود در کنار whmcs استفاده می کنند و اخبار و اطلاعیه های خود را توسط آن منتشر می کنند و به عنوان مثال می خواهند منوی “اخبار” یا Announcements آنها به صفحه ای خاص از سایت وردپرسی آنها لینک شود. برای این کار باید از کد setUri در هوک استفاده کنند. در کد زیر طریقه استفاده از این کد در فایل هوک ذکر شده است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
?php use WHMCS\View\Menu\Item as MenuItem; add_hook('ClientAreaPrimaryNavbar', 1, function (MenuItem $primaryNavbar) { $navItem = $primaryNavbar->getChild('Support'); if (is_null($navItem)) { return; } $navItem = $navItem->getChild('Announcements'); if (is_null($navItem)) { return; } $navItem->setLabel('عبارت دلخواه شما'); $navItem->setUri('https://www.example.com/3rdpartyblogsystem'); }); |
همانطور که مشاهده می کنید همه کد مانند کد قبلی می باشد و فقط قسمت setUri به آن اضافه شده است. البته می توانید خط مربوط به setLabel را حذف کنید و از آن استفاده نکنید.
تغییر چیدمان منو ها
حال که با ساختار کدهای هوک در مورد منو ها آشنا شدید احتمالا به راحتی بتوانید از کد زیر برای ترتیب دادن به منوها استفاده کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php use WHMCS\View\Menu\Item as MenuItem; add_hook('ClientAreaPrimaryNavbar', 1, function (MenuItem $primaryNavbar) { $navItem = $primaryNavbar->getChild('Support'); if (is_null($navItem)) { return; } $navItem = $navItem->getChild('Announcements'); if (is_null($navItem)) { return; } $navItem->setOrder(1); }); |
این کد منوی اخبار را می گیرد و به آن رتبه ۱ را اختصاص می دهد که بالاترین منو در قسمت پشتیبانی می شود. کدهای کمکی زیر هم می توانید استفاده کنید:
1 2 3 4 5 6 7 8 |
// Moves a menu item up one position $primaryNavbar->getChild('Support')->getChild('Announcements')->moveUp(); // Moves a menu item down one position $primaryNavbar->getChild('Support')->getChild('Announcements')->moveDown(); // Moves a menu item to the first position $primaryNavbar->getChild('Support')->getChild('Announcements')->moveToFront(); // Moves a menu item to the last position $primaryNavbar->getChild('Support')->getChild('Announcements')->moveToBack(); |
ایجاد منوی جدید
جهت اضافه کردن یک منوی جدید به منوی اصلی می توانید از کد زیر در هوک استفاده کنید:
1 2 3 4 5 6 7 8 9 |
<?php #adding Menu Item to primaryNavbar use WHMCS\View\Menu\Item as MenuItem; add_hook('ClientAreaPrimaryNavbar', 1, function (MenuItem $primaryNavbar) { $primaryNavbar->addChild('Menu Name') ->setUri('https://www.example.com/') ->setOrder(70); }); |
ایجاد زیر منوی جدید
مثلا اگر بخواهید یک منوی تماس اضطراری به منوی پشتیبانی اضافه کنید که به صفحه emergency.php لینک شده باشد کد زیر به شما کمک می کند:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php use WHMCS\View\Menu\Item as MenuItem; add_hook('ClientAreaPrimaryNavbar', 1, function (MenuItem $primaryNavbar) { if (!is_null($primaryNavbar->getChild('Support'))) { $primaryNavbar->getChild('Support') ->addChild('Emergency Contacts', array( 'label' => 'Emergency Contacts', 'uri' => 'emergency.php', 'order' => '100', )); } }); |
حذف یک منو
جهت حذف یک منو مثلا منوی “وضعیت شبکه” از کد زیر استفاده کنید.
1 2 3 4 5 6 7 8 |
<?php use WHMCS\View\Menu\Item as MenuItem; add_hook('ClientAreaPrimaryNavbar', 1, function (MenuItem $primaryNavbar) { if (!is_null($primaryNavbar->getChild('Network Status'))) { $primaryNavbar->removeChild('Network Status'); } }); |
و یا برای حذف یک زیر منو از قسمت پشتیبانی بنام اخبار کد زیر به شما کمک می کند:
1 2 3 4 5 6 7 8 9 10 |
<?php use WHMCS\View\Menu\Item as MenuItem; add_hook('ClientAreaPrimaryNavbar', 1, function (MenuItem $primaryNavbar) { if (!is_null($primaryNavbar->getChild('Support'))) { $primaryNavbar->getChild('Support')->removeChild('Announcements'); } }); |
ویرایش دیگر منو ها
در قالب Six بطور پیشفرض ۴ منو وجود دارد که در مثال های بالای فقط با منوی اصلی یعنی PrimaryNavbar کارهایی انجام شد. دیگر منوی های موجود مطابق تصویر زیر می باشند:
با کمی خلاقیت و بوسیله همین کدهای ارائه شده می توانید نسبت به ویرایش منوهای دیگر نیز اقدام کنید.
23 دیدگاه
همانطور که مشاهده می کنید این کد ابتدا وارد منوی Support را و سپس وارد منوی Announcements که یک child از آن است می شود و در نهایت label منو را به عبارت دلخواه تغییر می دهد. حال کافیست این فایل را در آدرس /includes/hooks پوشه whmcs خود کپی کنید تا اثر آن را مشاهده نمایید.
برا من اصلا فایل hooks نداره و وقتی میذارم هیچ اتفاقی نمیفته
یعنی whmcs که نصب کردید پوشه ای بنام includes و سپس داخل آن پوشه ای بنام hooks نداره؟ فایل مثال که گفته شد بسازید بنام custom-menus.php را باید داخل پوشه hook ها آپلود کنید.
منظورم اینه که پوشه باید ساخته بشه با نام hook یا hooks
بعد در آن custom-menus.php بارگذاری بشه
نخیر این پوشه همراه whmcs نصب میشود. پوشه include و داخل آن پوشه hooks همراه whmcs شما مثل پوشه admin و غیره باید باشند.
لطف میکنید یک فایل آماده که از قبل خود شما درست کرده اید را برای دانلود قرار دهید. متاسفانه روش بالا منجر به خطای ۵۰۰ میشود.
مشکل حل شد. بسیار ساده بود. ممنون از راهنمای خوبتان
موفق باشید، مشکل خاصی بود در خدمتم.
برای بقیه منوها باید دقیقا از چه نامی استفاده کنیم؟ تغییرات دیگر منوها را هم میتوان در همین یک فایل php نوشت؟
بله می توانید اما مناسبتر هست برای هر منو فایل جداگانه بسازید که بعد ها برای هر تغییراتی راحت تر باشید.
این هم خوشبختانه حل شد. در همان یک فایل. با سپاس فراوان
سلام
بنده یک کد حذف شبکه که عینا از سایت شما کپی می کنم مطابق روال بالا در هستم گذاشتم ولی دیگر سایتم بالا نمی آید زمانیکه کد را حذف می کنم دوباره همی درس میشه مشکل کجاست؟
مشکل رو فهمیدم کدهای بالا را وقتی در یک فایل یکجا وارد می کنم یعنی اول کد ایجاد منو و بعد کد ایجاد زیر منو با مشکل بالا نیامدن سایت مواجه می شم ولی استفاده تک تک کدها این مشکل را ندارم
پس مشکل حل شد
بسیار عالیست ولی لطفا منو های دیگر را هم توضیح بدهید باتشکر
از آموزش مفید شما خیلی خیلی ممنونم
مطالب سایت شما بسار ارزنده است از زحمات بیشمار شما سپاسگزارم
آموزش بسیار عالی و خوبی داشتیدو بسیار کاربردی بود به امید موفقیت هرچه بیشتر شما
خدا خیرت بده .خیلی خیلی کاربردی بود
سلام.ببخشید این مسیر “use WHMCS\View\Menu\Item as MenuItem;” برای همه جا یکسان است؟ چون من WHMCS را در یک فولدر نصب کردم کی خواستم بدونم بدونم باید اونو هم اضافه کنم یا نه؟
بله باید یکسان باشد، بهتر است تست کنید.
سلام و خسته نباشید سایت خیلی خوبی دارید به جرات می تونم بگم تو حوضه ی فعالیتتون بهترینید تشکر فراوان
یه سوال:
کاری که گفتید انجام دادم و اوکی بود اما برای اطلاعات شخصی خودم میخواستم بدونم چرا کد <?php باز شده ولی بسته نشده؟!
بخاطرا اینکه درون فایل phpدیگری include میشه