Jump to content
  • 0

Wyciągnięcie źródła sklepu do szczegółow zamówień


KamikStudio

Question

Chciałbym wyciągnąć źródło sklepu do szczegółów zamówień. W sensie jest multistore i gdy wpadają zamówienia to na liście zamowień pokazuje się sklep A sklep B sklep C. Po wejściu w szczegóły chciałbym uzyskać to samo.

Jestem już w pliku products.html.twig w katalogu

src/PrestaShopBundle/Resources/view/admin/Sell/Order/Order/Blocks/View 

odpowiedzialny za widok szczegółów zamówień

namierzyłem także odwołanie do multistore w 

/src/PrestaShopBundle/Controller/Admin/Sell/Order/OrderController.php

w sumie zaraz na początku

public function createAction(Request $request)
    {
        /** @var MultistoreContextCheckerInterface $shopContextChecker */
        $shopContextChecker = $this->container->get('prestashop.adapter.shop.context');

        if (!$shopContextChecker->isSingleShopContext()) {
            $this->addFlash('error', $this->trans(
                'You have to select a shop before creating new orders.',
                'Admin.Orderscustomers.Notification'
            ));

            return $this->redirectToRoute('admin_orders_index');
        }

        $summaryForm = $this->createForm(CartSummaryType::class);
        $languages = $this->get('prestashop.core.form.choice_provider.language_by_id')->getChoices(
            [
                'shop_id' => $shopContextChecker->getContextShopID(),
            ]
        );
        $currencies = $this->get('prestashop.core.form.choice_provider.currency_by_id')->getChoices();

        $configuration = $this->get('prestashop.adapter.legacy.configuration');

        return $this->render('@PrestaShop/Admin/Sell/Order/Order/create.html.twig', [
            'currencies' => $currencies,
            'languages' => $languages,
            'summaryForm' => $summaryForm->createView(),
            'help_link' => $this->generateSidebarLink($request->attributes->get('_legacy_controller')),
            'enableSidebar' => true,
            'recycledPackagingEnabled' => (bool) $configuration->get('PS_RECYCLABLE_PACK'),
            'giftSettingsEnabled' => (bool) $configuration->get('PS_GIFT_WRAPPING'),
        ]);
    }

i mamy tam

'shop_id' => $shopContextChecker->getContextShopID(),

dlatego też w pliku products.html.twig dodałem przy labelu h3 "Produkty", Źródło sklep: 

  <div class="card-header">
    <h3 class="card-header-title">
      {{ 'Products'|trans({}, 'Admin.Global') }} (<span id="orderProductsPanelCount">{{ orderForViewing.products.products|length }}</span>) &nbsp;Źródło sklep: {{ getContextShopID }}
    </h3>
  </div>

Jednak bezskutecznie 

Na bank problem jest w zmiennej, pewnie nie to wrzuciłem

{{ getContextShopID }}

pytanie co i jak? :)

Link to comment
Share on other sites

11 answers to this question

Recommended Posts

  • 0
  <div class="card-header">
    <h3 class="card-header-title">
      {{ 'Products'|trans({}, 'Admin.Global') }} (<span id="orderProductsPanelCount">{{ orderForViewing.products.products|length }}</span>) &nbsp;Sklep: {{ OrderForViewing.shopId }}
    </h3>
  </div>

@atomek Dodane, wyczyściłem cache, ale nie pokazuje się nic, oprócz Sklep:

plus błąd po debugu

image.thumb.png.42f5607ee4878f9f63dff8cf1be0053c.png

Edited by KamikStudio (see edit history)
Link to comment
Share on other sites

  • 0

Działa. Problem był taki, że zamiast małej literki "o" dałem dużą "O". Wyświetla się id sklepu. To i tak mnie nie satysfakcjonuje, ponieważ chciałbym uzyskać nazwę zgodnie z tabelą ps_shop kolumna name. Prościej byłoby gdyby w dokumentacji presty pojawiła się notka odnośnie tego, jakie klasy są używane do czego.

 

Edited by KamikStudio (see edit history)
Link to comment
Share on other sites

  • 0

Myślę, że źle podchodzisz do tematu, wg mnie łatwiej byłoby gdybyś podpiął się pod któryś z dostępnych hook za pomocą modułu, tutaj masz wizualizację:

https://devdocs.prestashop.com/1.7/modules/sample-modules/order-pages-new-hooks/

Jeżeli miejsce Tobie nie pasuje tak w 100% to chwyć dany element JSem i go przenieś gdziekolwiek chcesz.

A jak pobrać nazwę sklepu?

W hook możesz sobie zrobić mniej więcej coś takiego:

$order = new Order((int) $params['id_order']);
$orderShop = new Shop($order->id_shop);

$shopName = $orderShop->name;

// tutaj zwracasz dane do widoku Smarty, czy Twigiem

Tu masz też moduł przykładowy działający z hookami na stronie zamówienia:

https://github.com/PrestaShop/example-modules/tree/master/demovieworderhooks

Pamiętaj, że powinieneś unikać modyfikowania plików Core PrestaShop.

Link to comment
Share on other sites

  • 0

@Krystian Podemski

    public function hookDisplayAdminOrderTop(array $params)
    {
        $order = new Order((int) $params['id_order']);
        $orderShop = new Shop($order->id_shop);
        
        $shopName = $orderShop->name;

        return $this->render($this->getModuleTemplatePath() . 'pokazzrodlosklepu.tpl');
    }

oraz views/templates/admin/pokazzrodlosklepu.tpl

<div id="pokazZrodloSklepu" class="block">
  <h4>{l s='Sklep' mod='pokazZrodloSklepu'}</h4>
  <div class="block_content">
    <p>{$shop.name}</p>
  </div>
</div>

Czy dobrze zrozumiałem?

Link to comment
Share on other sites

  • 0
11 hours ago, Krystian Podemski said:

Prawie dobrze, jeżeli chcesz używać Smarty to nie używasz $this->render + musisz przypisać zmienne do widoku. Zerknij na inne moduły, na pewno zrozumiesz.

W takim razie, nie pozostaje nic innego jak

return $this->display(__FILE__, 'pokazzrodlosklepu.tpl');

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...