GOOGLE ADS

Samstag, 23. April 2022

Überschreibt den Controller von Prestashop 1.7.7

Bitte, hat jemand ein Beispiel für die Überschreibung des Admin-Controllers für Prestashop 1.7.7 (basierend auf Symfony)?

Danke für deine Antworten.


Lösung des Problems

Dazu habe ich ein Mustermodul erstellt, das hier (unter Releases) heruntergeladen werden kann.

Der Prozess zum Überschreiben der spezifischen Route /adminXXXX/index.php/sell/orders/ist wie folgt:

  • Sie erstellen einen Symfony-Controller in Ihrem Projekt (der Code ist etwas weiter unten). Ich erstelle sie innerhalb src/Controllervon, was die Konvention ist. Dieser Controller muss die Klasse erweitern PrestaShopBundle\Controller\Admin\FrameworkBundleAdminController. Ich lade meine Klassen mit dem Composer Autoloader, also hier ist das Setup:

  • "autoload": {
    "psr-4": {
    "Skaparate\\": "src/"
    },
    "classmap": [
    "sk_testmodule.php"
    ],
    "exclude-from-classmap": []
    },

  • Sie müssen einen Ordner configim Stammverzeichnis Ihres Projekts erstellen. Dies ist wichtig, da PrestaShop die Routen und Dienste von dort lädt.

  • Erstellen Sie eine Datei namens routes.ymlinnerhalb des zuvor erstellten Ordners.

  • Definieren routes.ymlSie darin die Route, die Sie überschreiben möchten. In diesem Fall heißt die Route admin_orders_index, daher schreiben wir Folgendes:

  •  admin_orders_index:
    path: /sell/orders/
    # POST is required because admin_order_index is also setup as the grid reset return route.
    methods: [GET,POST]
    defaults:
    _controller: 'Skaparate\Controller\Admin\CustomOrdersController::indexAction'
    _disable_module_prefix: true

  • Und schließlich ist dies der eigentliche Controller:

  • <?php
    namespace Skaparate\Controller\Admin;
    if (!defined('_PS_VERSION_')) {
    die;
    }
    use PrestaShopBundle\Controller\Admin\FrameworkBundleAdminController;
    use PrestaShopBundle\Security\Annotation\AdminSecurity;
    use PrestaShopBundle\Security\Annotation\ModuleActivated;
    use Symfony\Component\HttpFoundation\Response;
    use Symfony\Component\HttpFoundation\Request;
    class CustomOrdersController extends FrameworkBundleAdminController
    {
    /**
    * Shows list of orders
    *
    * @param Request $request
    * @param OrderFilters $filters
    *
    * @return Response
    */
    public function indexAction(Request $request)
    {
    return $this->render(
    '@Modules/sk_testmodule/views/templates/admin/sell/order/index.html.twig',
    [
    'enableSidebar' => true,
    ]
    );
    }
    }

    Diese Projektstruktur wäre:

    ├── composer.json
    ├── composer.lock
    ├── config
    │   └── routes.yml
    ├── README.md
    ├── sk_testmodule.php
    ├── src
    │   └── Controller
    │   └── Admin
    │   └── CustomOrdersController.php
    └── views
    └── templates
    └── admin
    └── sell
    └── order
    └── index.html.twig

    Natürlich müssen Sie die Datei erstellen views/templates/admin/sell/orders/index.html.twig. Ich habe es in diesen Pfad eingefügt, um die PrestaShop-Struktur beizubehalten, aber es ist nicht erforderlich.

    Als Referenz sind Symfony-Routen in src/PrestaShopBundle/Resources/config/routes(relativ zur PrestaShop-Installation) definiert.

    Grüße!

    Keine Kommentare:

    Kommentar veröffentlichen

    Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

    Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...