Magento2 : 2.2.4로 업그레이드 한 후 제품 페이지에서 이동 경로가 사라졌습니다.


19

Magento를 2.2.4로 업그레이드했으며 이제 제품 페이지에 빵 부스러기가 없습니다. 다른 페이지에는 표시되지만 제품에는 표시되지 않습니다. 소스를 확인하고 'breadcrumbs'클래스와 일부 json 매개 변수가있는 div가 있지만 비어 있습니다 (콘솔에 오류가 없음).

어떤 생각?


업데이트 :
설명 할 수없는 이유로 Magento는 JS를 사용하여 최상위 메뉴 탐색을 기반으로 제품 페이지의 빵 부스러기를 만들기 시작했습니다. 제 경우에는 메뉴를 변경하고 다른 CSS 선택기를 사용했기 때문에 중단되었습니다. 일.
나는 지금이 문제를 해결할 수 있다고 생각하지만, 그들이 그렇게할만한 이유를 볼 수는 없다. 너무 깨지기 쉽다.


내 임시 해결 방법 (누군가를 돕는 경우 ...) :

1. 모듈을 빌드하고 getCrumbs () 메소드를 추가하기 위해 \ Magento \ Theme \ Block \ Html \ Breadcrumbs를 확장하는 블록을 추가하십시오.

namespace Vendor\Module\Block\Html;

class Breadcrumbs extends \Magento\Theme\Block\Html\Breadcrumbs
{
    public function getCrumbs()
    {
        return $this->_crumbs;
    }

    public function getBaseUrl()
    {
        return $this->_storeManager->getStore()->getBaseUrl();
    }
}

2. 제품 페이지에서 breadcrumbs 템플릿을 재정의합니다 (app / design / frontend / Vendor / Theme / Magento_Catalog / templates / product / breadcrumbs.phtml)

<?php
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$catalogData = $objectManager->create('Magento\Catalog\Helper\Data');
$crumbs = false;
if ($breadcrumbsBlock = $objectManager->create('Vendor\Module\Block\Html\Breadcrumbs')) {
    $breadcrumbsBlock->addCrumb(
        'home',
        [
            'label' => __('Home'),
            'title' => __('Go to Home Page'),
            'link' => $breadcrumbsBlock->getBaseUrl()
        ]
    );
    $path = $catalogData->getBreadcrumbPath();
    foreach ((array)$path as $name => $breadcrumb) {
        $breadcrumbsBlock->addCrumb($name, $breadcrumb);
    }
    $crumbs = $breadcrumbsBlock->getCrumbs();
}
?>
<?php if ($crumbs && is_array($crumbs)) : ?>
    <div class="breadcrumbs">
        <ul class="items">
            <?php foreach ($crumbs as $crumbName => $crumbInfo) : ?>
                <li class="item <?= /* @escapeNotVerified */ $crumbName ?>">
                <?php if ($crumbInfo['link']) : ?>
                    <a href="<?= /* @escapeNotVerified */ $crumbInfo['link'] ?>" title="<?= $block->escapeHtml($crumbInfo['title']) ?>"><?= $block->escapeHtml($crumbInfo['label']) ?></a>
                <?php elseif ($crumbInfo['last']) : ?>
                    <strong><?= $block->escapeHtml($crumbInfo['label']) ?></strong>
                <?php else: ?>
                    <?= $block->escapeHtml($crumbInfo['label']) ?>
                <?php endif; ?>
                </li>
            <?php endforeach; ?>
        </ul>
    </div>
<?php endif; ?>

var 폴더를 지우고 bin / magento set : up을 실행하십시오.
hweb87

그 외에? (나는 이미 모든 일반적인 것들을 시도했다)
Pini

@Pini 이것은 완벽하게 작동합니다.
Arvind07

또한 업그레이드 2.2.5 이후에도 같은 문제가 발생합니다.
Mano M

공장! $ crumbInfo가 첫 번째 / 마지막 정보를 반환하지 않았기 때문에 작은 문제만으로 직접 추가해야했습니다
Volvox

답변:


13

나는 같은 문제를 발견했고 ObjectManager없이 조금 더 쉬웠다. 카테고리로 수행되는 방법을 찾아서 사용했습니다. 에서 catalog_product_view.xml템플릿을 Magento_Theme으로 다시 씁니다.

<referenceBlock name="breadcrumbs" template="Magento_Theme::html/breadcrumbs.phtml" />

그런 다음 작은 플러그인을 작성했습니다.

namespace Vendor\Module\Plugin\Catalog\Block\Product;

class View
{

    /**
     * Add Breadcrumbs Block
     *
     * @param \Magento\Catalog\Block\Product\View $subject
     * @param $result
     * @return mixed
     * @throws \Magento\Framework\Exception\LocalizedException
     */
    public function afterSetLayout(\Magento\Catalog\Block\Product\View $subject, $result) {
        $subject->getLayout()->createBlock(\Magento\Catalog\Block\Breadcrumbs::class);

        return $result;
    }
}

마지막으로 di.xml:

<type name="Magento\Catalog\Block\Product\View">
    <plugin name="add_catalog_breadcrumb_block" type="Vendor\Module\Plugin\Catalog\Block\Product\View" />
</type>

제품 페이지에서 빵 부스러기와 누락 된 페이지 제목 (헤드 섹션)의 두 가지 문제가 해결되었습니다.


좋은 것! 실제로 Magento가 공식 수정 사항을 제공하기를 희망했기 때문에 (버그라고 생각할 수있는 한) 테마 영역에 최대한 머물려고했습니다. 그러나 이것은 할 것이며 & 솔루션을 수정하는 모듈로 쉽게 전환 할 수 있습니다.
Pini

나는 또한 같은 문제에 직면 ... magento2.2.5에서 이것을 해결하는 방법
Mano M

좋은. 이것은 Magento 2.2.5에서 작동합니다. 감사합니다
MGento

"작은 플러그인"에 대한 코드를 어디에 두어야합니까?
jogoe


5

이 두 줄은 클래스 이동 경로 블록을 복원합니다. 그게 다야. 커스텀 플러그인이나 다른 것 없음 :

<referenceBlock name="breadcrumbs" template="Magento_Theme::html/breadcrumbs.phtml" />
<block class="Magento\Catalog\Block\Breadcrumbs" />

1

여기에 도착하여 아마도 이것을 위해 플러그인을 설치하고 싶지 않은 누군가에게, 내가해야 할 일은 이것을 내 템플릿에 추가하는 것 (완전히 숨겨져 있음)과 빵 부스러기가 다시 나타나기 시작했습니다.

<div data-action="navigation" style="display:none;"><ul  data-mage-init='{"menu":{"responsive":false, "expanded":true, "delay":0, "position":{"my":"left top","at":"left bottom"}}}'></ul></div>

이것은 사실이지만 올바른 부스러기 구조를 따르지 않는 것 같습니다. 내 제품 페이지 이동 경로에 홈> 제품 이름이 표시됩니다. 해당 카테고리에 대한 언급이 없습니다.
Digital_Frankenstein
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.