Post by ShopNet » Wed Oct 16, 2024 7:07 pm

I want to update my OpenCart 3 extensions for OpenCart 4. To manage the extensions easily, I'm trying to add menu items to the admin menu using events. The event for my module is successfully added, but there's no change in the menu. The sample code I'm using is as follows.

Code: Select all

<?php
namespace Opencart\Admin\Controller\Extension\CanvasPro\Module;
class CanvasPro extends \Opencart\System\Engine\Controller {

public function install() {
    $this->load->model('setting/event');
    $this->model_setting_event->addEvent([
        'code' => 'canvaspro_menu',
        'description' => 'Add CanvasPro Menu Item',
        'trigger' => 'admin/view/common/column_left/after',
        'action' => 'extension/canvaspro/module/canvaspro|addMenu',
        'sort_order' => 0,
        'status' => 1
    ]);
}

public function uninstall() {
    $this->load->model('setting/event');
    $this->model_setting_event->deleteEventByCode('canvaspro_menu');
}


public function addMenu(string $route, array &$args): void {
    $this->load->language('extension/canvaspro/module/canvaspro');
    $data = &$args[0];

    $menu_item = [
        'id'       => 'menu-canvaspro',
        'icon'     => 'fa fa-cube',
        'name'     => $this->language->get('text_salas'),
        'href'     => $this->url->link('extension/canvaspro/module/canvaspro', 'user_token=' . $this->session->data['user_token'], true),
        'children' => [
            [
                'name'     => $this->language->get('text_add_new'),
                'href'     => $this->url->link('extension/canvaspro/module/canvaspro|add', 'user_token=' . $this->session->data['user_token'], true),
                'children' => []
            ],
            [
                'name'     => $this->language->get('text_settings'),
                'href'     => $this->url->link('extension/canvaspro/module/canvaspro|setting', 'user_token=' . $this->session->data['user_token'], true),
                'children' => []
            ]
        ]
    ];

    $menu_inserted = false;
    foreach ($data['menus'] as &$menu) {
        if ($menu['id'] == 'menu-design') {
            array_unshift($menu['children'], $menu_item);
            $menu_inserted = true;
            break;
        }
    }

    if (!$menu_inserted) {
        $data['menus'][] = $menu_item;
    }
}



    public function index(): void {
        $this->load->language('extension/canvaspro/module/canvaspro');

        $this->document->setTitle($this->language->get('heading_title'));

        $data['heading_title'] = $this->language->get('heading_title');

        $data['text_add_new'] = $this->language->get('text_add_new');
        $data['text_setting'] = $this->language->get('text_setting');

        $data['breadcrumbs'] = [];

        $data['breadcrumbs'][] = [
            'text' => $this->language->get('text_home'),
            'href' => $this->url->link('common/dashboard', 'user_token=' . $this->session->data['user_token'])
        ];

        $data['breadcrumbs'][] = [
            'text' => $this->language->get('heading_title'),
            'href' => $this->url->link('extension/module/canvaspro', 'user_token=' . $this->session->data['user_token'])
        ];

        $data['add_new'] = $this->url->link('extension/module/canvaspro/canvaspro.addNew', 'user_token=' . $this->session->data['user_token']);
        $data['setting'] = $this->url->link('extension/module/canvaspro/canvaspro.setting', 'user_token=' . $this->session->data['user_token']);

        $data['header'] = $this->load->controller('common/header');
        $data['column_left'] = $this->load->controller('common/column_left');
        $data['footer'] = $this->load->controller('common/footer');

        $this->response->setOutput($this->load->view('extension/canvaspro/module/canvaspro', $data));
    }

    public function add() {
        echo "Add New";
    }

    public function setting() {
        echo "Setting";
    }
}
I would greatly appreciate any help or guidance on this issue.

Newbie

Posts

Joined
Mon Dec 02, 2019 7:59 am

Post by softmonke » Thu Oct 17, 2024 2:24 pm

Which OpenCart version are you using? From OpenCart 4.0.2.0 and onwards, the URL separator should be "." instead of "|".

So if you are using 4.0.2.x, your action route should be "extension/canvaspro/module/canvaspro.addMenu" instead of "extension/canvaspro/module/canvaspro|addMenu".

Check out our ever-growing list of extensions for OpenCart here.
Some useful extensions for a better admin experience: Image File Manager ProDrag & Drop Sort Order

Reach out to us at hello@softmonke.com for your OpenCart web development needs or feedback for our extensions.


User avatar
Active Member

Posts

Joined
Tue May 23, 2023 4:42 am


Post by OSWorX » Thu Oct 17, 2024 5:56 pm

First of all, you tell us that you're a developer.
Want to update his v3 extensions to v4 .. well good, but this here is a user forum, not a developer forum!

How did you deveop your v3 extensions?

Beside all of this, why you are using this:

Code: Select all

$data = &$args[0];
Makes no sense at all!

Full Stack Web Developer :: Dedicated OpenCart Development & Support DACH Region
Contact for Custom Work / Fast Support.


User avatar
Administrator

Posts

Joined
Mon Jan 11, 2010 10:52 pm
Location - Austria
Who is online

Users browsing this forum: No registered users and 4 guests