ویرایش منوهای whmcs نسخه 6 به بالا

whmcs

در نسخه ۶ نرم افزار whmcs تغییرات زیادی ایجاد شده که یکی از آنها تغییر نوع مدیریت منوها در قالب های پیشفرض این سیستم است. در نسخه های ۵ و ماقبل منوهای ناحیه کاربری از طریق ویرایش فایل های قالب مثل header.php و … امکانپذیر بود اما در نسخه ۶ منوهای whmcs باید از طریق Hook ها مدیریت شوند.

منوهای navigation بالای سایت و همچنین منوهای کناری Sidebar همه بوسیله Hook باید مدیریت، ویرایش و حذف و اضافه شوند و این به معنای این است که شما باید دستی در برنامه نویسی داشته باشید. در این مطلب سعی می کنیم تا حدودی شما را با چگونگی انجام اینکار آشنا کنیم.

البته در این مطلب به منوهای Navigation می پردازیم و در فرصتی دیگر و در صورت نیاز مطلبی در مورد منوهای کناری خواهیم نوشت. اما روش کار در کل یکسان است.

جهت حذف یا ویرایش هر منو ابتدا باید نام منوی مورد نظر را پیدا کنید. هر منویی یک نام منحصر بفرد باید داشته باشد. نام هر منو را با بررسی سورس html صفحه ناحیه کاربری می توانید پیدا کنید.  گزینه inspect elements در مرورگر ها هم می تواند کمک کند. به عنوان مثال در تصویر زیر مقدار menuitemname برای منوی اخبار یا Announcements را مشاهده می کنید.

Menu-inspect-element

ساختار منوها بصورت درختی می باشد یعنی همانطور که در تصویر مشاهده می کنید منوی Announcements زیر مجموعه ای از منوی Support است. بنابراین لازم است شما برای هر منویی که قصد ویرایش دارید نام مجموعه بالایی آن را هم پیدا کنید.

تغییر عنوان منو

عنوان هر منو به راحتی از فایل زبان مورد استفاده قابل تغییر است، مثلا شما در فایل زبان فارسی به راحتی می توانید عنوان منوی “اخبار” را به کلمه “اطلاعیه ها” تغییر دهید. اما می توانید همین کار را هم از طریق Hook انجام دهید که بخاطر سادگی آن را مثال می زنیم تا با کارکرد هوک ها کمی آشنا شوید.

ابتدا یک فایل بنام custom-menus.php بسازید و کد زیر را داخل آن قرار دهید:

    <?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 در هوک استفاده کنند. در کد زیر طریقه استفاده از این کد در فایل هوک ذکر شده است:

    <?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 را حذف کنید و از آن استفاده نکنید.

تغییر چیدمان منو ها

حال که با ساختار کدهای هوک در مورد منو ها آشنا شدید احتمالا به راحتی بتوانید از کد زیر برای ترتیب دادن به منوها استفاده کنید:

    <?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);

    });

این کد منوی اخبار را می گیرد و به آن رتبه ۱ را اختصاص می دهد که بالاترین منو در قسمت پشتیبانی می شود. کدهای کمکی زیر هم می توانید استفاده کنید:

    // 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();

ایجاد منوی جدید

جهت اضافه کردن یک منوی جدید به منوی اصلی می توانید از کد زیر در هوک استفاده کنید:

    <?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 لینک شده باشد کد زیر به شما کمک می کند:

    <?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',
                ));
        }
    });

حذف یک منو

جهت حذف یک منو مثلا منوی “وضعیت شبکه” از کد زیر استفاده کنید.

    <?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');
        }
    });

و یا برای حذف یک زیر منو از قسمت پشتیبانی بنام اخبار کد زیر به شما کمک می کند:

    <?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 کارهایی انجام شد. دیگر منوی های موجود مطابق تصویر زیر می باشند:

whmcs-menus

با کمی خلاقیت و بوسیله همین کدهای ارائه شده می توانید نسبت به ویرایش منوهای دیگر نیز اقدام کنید.

باتشکر از شیوا هاست عزیز بابت تهییه این آموزش کامل

منبع : تغییر منوهای whmcs

ممکن هست به کارتون بیاد

درباره نویسنده : وهاب سید چورته

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

  1. سلام
    خسته نباشید
    ممنونم از مطالب خوبتون خیلی استفاده کردم بدرد بخور بود
    من یه کد می خوام که صفحه ای که به نام قوانین ساختم سایدبارش هم بالا بیاد همچین امکانی هستش ؟

    1. فایل سایدبار را در قالب فراخوانی کنید
      با استفاده از innclude
      در قالب های whmcs در صفحات مختلف میتونید این کد رو دریافت کنید

  2. سلام
    ممنونم جناب وهاب عزیز
    یه راهنمایی کوچیک می شه بفرمایید ؟
    توی کدوم یک از کدها و به جای کدام کد و در کدام خط
    ممنونم

  3. سلام
    جناب وهاب ممنونم از همکاریتون خیلی خوشحال هستم که مشتاق هستید حل مشکل رو کمک کنید
    منظورم اینه که از کدهای بالا باید کدوم کد رو بذارم و داخل کد چه قسمتی رو تغییر بدم

  4. با سلام.
    میخواستم بدونم میشه از چندتا کد در یه فایل استفاده کرد. یا هرکدوم فایل جدا میخواد.
    اگه میشه یه نمونه بزارید ممنون میشم.
    هرچی میزارم خطا میده…

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

  6. سلام من قالب خارجی نصب کردم فارسی کردم فقط نمی تونم  منو به تر تیب  بزارم باید چکار کنم مثلا صفحه اول آخر

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *