$ block Class Một số Phương thức sẽ không xuất hiện trong lệnh gọi get_group_methods ()


7

Tôi đang làm việc trong tệp \ thành công. Với mục tiêu cuối cùng là đặt iframe theo dõi trên trang xác nhận.

<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/

// @codingStandardsIgnoreFile
?>
<?php /** @var $block \Magento\Checkout\Block\Onepage\Success  **/?>


<div class="checkout-success">
<?php if ($block->getOrderId()):?>
    <?php if ($block->getCanViewOrder()) :?>
        <p><?= __('Your order number is: %1.', sprintf('<a href="%s" class="order-number"><strong>%s</strong></a>', $block->escapeHtml($block->getViewOrderUrl()), $block->escapeHtml($block->getOrderId()))) ?></p>
    <?php  else :?>
        <p><?= __('Your order # is: <span>%1</span>.', $block->escapeHtml($block->getOrderId())) ?></p>
    <?php endif;?>
        <p><?= /* @escapeNotVerified */ __('We\'ll email you an order confirmation with details and tracking info.') ?></p>
<?php endif;?>

<?= $block->getAdditionalInfoHtml() ?>

<div class="actions-toolbar">
    <div class="primary">
        <a class="action primary continue" href="<?= /* @escapeNotVerified 
         */ $block->getContinueUrl() ?>"><span><?= /* @escapeNotVerified */ 
         __('Continue Shopping') ?></span></a>
    </div>
</div>
</div>
<div>
<?php
    $block_methods = get_class_methods($block);
?>
</div>
<script type="text/javascript">
    var obj = <?php echo json_encode($block_methods); ?>;
    console.log(obj);
</script>

Tôi đang cố gắng truy cập thông tin về sản phẩm / giỏ hàng của đơn đặt hàng, vì vậy tôi đã thực hiện cuộc gọi get_group_methods ($ block) như đã thấy ở trên. Kết quả đầu ra nói rằng khối $ có 80 phương thức khác nhau, nhưng không có phương thức nào được liệt kê là getOrderId (), điều này làm tôi bối rối vì phương thức đó được sử dụng trong tệp. Bất cứ ai có thể giải thích điều này? Ngoài ra, có thể truy cập các phương thức của lớp $ block từ một tệp khác không? Tôi khá mới với tiền mã hóa nên tôi khá bối rối vì điều này.

Câu trả lời:


7

Trong suốt, Magento sử dụng một loạt các phương thức ma thuật (chúng bắt đầu bằng get, set, uns và have) không xuất hiện trong danh sách phương thức.

Các phương thức này là các phím tắt để truy cập dữ liệu đã được đặt trên đối tượng. Hầu hết các lớp này mở rộng từ lớp cơ sở \Magento\Framework\DataObjectbao gồm các lớp khối.

Trong trường hợp cụ thể này, khối được khởi tạo với dữ liệu ở đây vendor/magento/module-checkout/Block/Onepage/Success.php

protected function prepareBlockData()
{
    $order = $this->_checkoutSession->getLastRealOrder();

    $this->addData(
        [
            'is_order_visible' => $this->isVisible($order),
            'view_order_url' => $this->getUrl(
                'sales/order/view/',
                ['order_id' => $order->getEntityId()]
            ),
            'print_url' => $this->getUrl(
                'sales/order/print',
                ['order_id' => $order->getEntityId()]
            ),
            'can_print_order' => $this->isVisible($order),
            'can_view_order'  => $this->canViewOrder($order),
            'order_id'  => $order->getIncrementId()
        ]
    );
}

Quan tâm là dòng cuối cùng nơi chúng tôi thêm gia tăng đơn hàng vào thuộc tính dữ liệu.

Điều này sau đó có thể được truy cập thông qua $block->getOrderId() đó cũng có thể được nêu khác với $block->getData('order_id').


Một trong những phương pháp "ma thuật" này có thể lấy dữ liệu giỏ hàng không?
Deg Nam

1
Dữ liệu trên là thông tin duy nhất đang được cung cấp cho khối. Bạn có thể muốn tải đơn hàng qua order_id và sau đó bạn có quyền truy cập vào tất cả các mục đã đặt hàng.
Kristof tại Fooman
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.