Как отобразить название магазина в корзине покупок?

У меня есть сайт с Drupal 8.6 и Commerce 2.11

У меня несколько магазинов, принадлежащих разным владельцам (макетплейс).

Когда покупатель находится в 2 магазинах, это создаст 2 тележки для покупок.

Как отобразить над тележкой для покупок название магазина?

Я создал 4 файла ниже в настраиваемом модуле.

Моя проблема:

Авторизованный пользователь добавляет продукты в свою корзину, у него возникает ошибка 403, когда он переходит на страницу корзины покупок.

Я проверил разрешения, и они правильно установлены.

Если я удалю свой настраиваемый модуль, корзина для покупок снова станет доступной.

Почему ?

commerce_marketplace_cart.info.yml :

name: Commerce Marketplace Cart
description: Implements Commerce Marketplace Cart.
type: module
core: 8.x
package: Commerce (contrib)
dependencies:
  - commerce:commerce_cart
  - commerce:commerce_product

commerce_marketplace_cart.module :

<?php

/**
 * @file
 * Commerce Marketplace Cart.
 */

commerce_marketplace_cart.routing.yml :

commerce_cart.page:
  path: '/cart'
  defaults:
    _controller: '\Drupal\commerce_marketplace_cart\Controller\MarketplaceCartController::cartPage'
    _title: 'Shopping carts'
  requirements:
    _permission: 'access cart'

В папке /src/Controller находится файл MarketplaceCartController.php:

<?php

namespace Drupal\commerce_marketplace_cart\Controller;

use Drupal\commerce_cart\Controller\CartController;

/**
 * Overrides the cart page controller.
 */
class MarketplaceCartController extends CartController {

  /**
   * {@inheritdoc}
   */
  public function cartPage() {
    $build = parent::cartPage();
    $carts = $this->cartProvider->getCarts();
    $carts = array_filter($carts, function ($cart) {
      /** @var \Drupal\commerce_order\Entity\OrderInterface $cart */
      return $cart->hasItems();
    });

    if (!isset($build['empty'])) {
      foreach ($build as $key => $value) {
        if (isset($value['#prefix'])) {
          $store_name = $carts[$key]->getStore()->getName();
          $build[$key]['#prefix'] = "<h2 class='cart cart-store-name'>{$store_name}</h2>" . $value['#prefix'];
        }
      }
    }

    return $build;
  }

}

person 553aa08930    schedule 08.11.2018    source источник


Ответы (1)


Вы дали разрешение под названием access_cart. Определите это разрешение в файле permission.yml и назначьте это разрешение пользователю.

person Meera    schedule 08.11.2018
comment
У всех пользователей должен быть доступ к корзине. Можно ли удалить авторизацию? - person 553aa08930; 08.11.2018
comment
Добавьте контент разрешения доступа, это общий. - person Meera; 08.11.2018
comment
что именно мне делать? Я не знаю, как это сделать. Должен ли он создать новый файл? В какой папке? Спасибо - person 553aa08930; 08.11.2018
comment
commerce_marketplace_cart.routing.yml это ваш собственный файл? Если да, измените требования: _permission: 'доступ к корзине' на 'доступ к содержимому' - person Meera; 08.11.2018
comment
Вы знаете название разрешения на доступ к товарам? - person 553aa08930; 08.11.2018
comment
доступ к контенту - это обычно используемое разрешение для предоставления доступа, и оно доступно для всех пользователей. - person Meera; 08.11.2018