Magento 2 Lỗi trình chuyển đổi cửa hàng trong phần Part-config.js, Uncaught TypeError: Không thể đọc thuộc tính '*' của không xác định (mật)


12

Tôi đang thực hiện một trình chuyển đổi cửa hàng tùy chỉnh trong chủ đề tùy chỉnh của mình.

Mẫu khối như sau:

<?php if (count($block->getStores())>1): ?>
    <?php $id = $block->getIdModifier() ? '-' . $block->getIdModifier() : ''?>

    <span><?php echo $block->escapeHtml($block->getStoreName()) ?></span>

    <span>/</span>

    <?php foreach ($block->getStores() as $_lang): ?>
        <?php if ($_lang->getId() != $block->getCurrentStoreId()): ?>
            <span class="view-<?php echo $block->escapeHtml($_lang->getCode()); ?> switcher-option">
                <a href="#" data-post='<?php /* @escapeNotVerified */ echo $block->getTargetStorePostData($_lang); ?>'>
                    <?php echo $block->escapeHtml($_lang->getName()) ?>
                </a>
            </span>
        <?php endif; ?>
    <?php endforeach; ?>

<?php endif; ?>

Liên kết đến cửa hàng mới được hiển thị chính xác vì vậy tôi đoán các công cụ xml là OK, nhưng khi nhấp vào tôi nhận được lỗi sau:

part-config.js: 33 Uncaught TypeError: Không thể đọc thuộc tính '*' của không xác định (bằng)

Việc tạo ra htmltrông như sau:

<span class="view-it switcher-option">
  <a href="#" data-post="{"action":"http:\/\/test.mysite.eu\/stores\/store\/switch\/","data":{"___store":"it","uenc":"aHR0cDovL3Rlc3QuZnJhZ2lhY29tb21pbGFuby5ldS8,"}}">
    It
  </a>
</span>

Bạn đã chạy lệnh triển khai và loại bỏ thư mục var?
Rakesh Jesadiya

Không XD Tôi sẽ làm điều đó và theo dõi
davideghz

Tôi chỉ chạy sudo php bin/magento setup:static-content:deployvới bất kỳ may mắn. Tại sao tôi phải xóa varthư mục? Chính xác những gì tôi nên loại bỏ?
davideghz

bạn phải xóa tất cả nội dung của thư mục var
Rakesh Jesadiya

1
@davideghz bạn đã có được giải pháp?
Mohammad Mujassam

Câu trả lời:


14

Tôi đã có cùng một vấn đề và phát hiện ra rằng hai khối này không được gọi nữa do các tùy chỉnh trong chủ đề.

Hai khối được mỗi mặc định được thêm vào trong <referenceContainer name="content">nhà cung cấp / magento / mô-đun khách hàng / view / frontend / layout / default.xml.

Hãy thử thêm lại các khối này trong layout.xml của bạn:

<block name="customer.section.config" class="Magento\Customer\Block\SectionConfig"
    template="Magento_Customer::js/section-config.phtml"/>
<block name="customer.customer.data"
    class="Magento\Customer\Block\CustomerData"
    template="Magento_Customer::js/customer-data.phtml"/>

Tôi có cùng một vấn đề nhưng các khối được kết xuất. Tôi đoán đó là vì tôi đang ở trong một phương thức requestJs trong khi gọi phương thức tải lại giỏ hàng, nhưng JS được thực thi trước khi khối được hiển thị. Tôi có thể phụ thuộc vào bất kỳ mô-đun js để tránh điều này?
bpoiss

1
Chỉ có vấn đề chính xác như vậy .. trong khi sử dụng github.com/SnowdogApps/magento2-theme-blank-sass (Magento 2.2.6). Thêm hai khối trên đã khắc phục vấn đề. Cảm ơn
giolliano sulit

4

Trong dự án của chúng tôi, chúng tôi đã sửa nó trong section-config.jstệp trong phương thức getAffectedSections(đó là lỗi của chúng tôi).
Chúng tôi đã thay thế dòng cuối cùng:

return _.union(_.toArray(actions), _.toArray(sections['*']));

Bằng cách sau:

return (sections && sections.length > 0) ? _.union(_.toArray(actions), _.toArray(sections['*'])) : {};

Để thực sự trả về một mảng trống khi không có phần nào bị ảnh hưởng.


Giải pháp của bạn có hoạt động tốt không?
Jared Chu

1
Vâng, đó là một cách giải quyết có chức năng, nhưng IIRC, gốc rễ thực sự của vấn đề của chúng tôi là sự lạm dụng nhẹ API API cuối cùng. Nó không làm cho sửa lỗi này không liên quan, nó vẫn là một sự bảo vệ để đảm bảo mã tiếp tục chạy và không dừng ở đây, trong các trường hợp lỗi không nghiêm trọng.
Flinth 18/12/18

1
Cảm ơn, nó hoạt động ..
Ravi Soni

Nó cũng làm việc cho tôi. Nhưng trong một số danh mục khi tôi thay đổi chế độ xem cửa hàng, sau khi thay đổi chế độ xem cửa hàng, tôi nhận được khóa biểu mẫu không hợp lệ. Vui lòng làm mới trang. Không có hình thức nào cả .... Tôi bối rối
GG

0

Chạy theo cùng một vấn đề mặc dù customer.section.configcustomer.customer.datađã được tải đúng vào trang.

Tuy nhiên, trong trường hợp của tôi, điều đó đã xảy ra do một tiện ích mở rộng đã cố gắng kích hoạt tải lại phần quá sớm (trước khi phần-config.js được tải với cấu hình phù hợp).

Được quản lý để giải quyết nó bằng cách thêm một điểm dừng trong getAffectedSectionsphần-config.js và kiểm tra biến url. Sau đó, di chuyển JS tiện ích mở rộng để tải sau khối customer.section.config:

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <move element="extension.js.block" destination="content" after="customer.section.config"/> 
    </body>
</page>

0

Trong trường hợp của chúng tôi, đây là một chút mã trong một mẫu mặc định đang tải tệp khách hàng-data.js sau khi nó đã được gọi trên trang thành công.

Chúng tôi tìm thấy tập tin: vendor/magento/module-checkout/view/frontend/templates/success.phtml

đang tải mã này:

<script>
    require([
        'Magento_Customer/js/customer-data'
    ], function (customerData) {
        var sections = ['cart'];
        customerData.invalidate(sections);
        customerData.reload(sections, true);
    });
</script>

Xóa mã này đã sửa nó, điều mà chúng tôi đã làm bằng cách tạo một bản sao của tệp này trong thư mục mẫu chủ đề của chúng tôi và xóa đoạn mã vi phạm.

Bạn có thể sử dụng các công cụ Chrome Dev để tìm ra lỗi xảy ra ở đâu và ngay trước đó trong tệp đó trên dev cục bộ của bạn thêm vào một console.trace();cuộc gọi để thiết lập chức năng đang gọi hàm đang ném lỗi trong bảng điều khiển. Theo chuỗi đến nơi bạn đang tải những thứ không đúng cách.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.