Làm cách nào để nhận url giao diện của sản phẩm từ phụ trợ?


8

Tôi đang phát triển một phần mở rộng của Magento 2. Tôi cần nhận url giao diện của sản phẩm từ phụ trợ. Tôi đã thử sử dụng:

//$storeManager->->setCurrentStore(2);
$url = $product->setStoreId(2)->getProductUrl();
$url = $product->setStoreId(2)->getUrlInStore(); 

nhưng $urlluôn luôn trả về một url phụ trợ, như thế http://<domain>/admin/catalog/product..... họ có thể làm việc trong Magento 1.x nhưng không phải cho 2.x. Có cách nào để có được url frontend không?


Bạn có thể phải đối mặt với một vấn đề tương tự như tôi trong magento.stackexchange.com/questions/138216/ mẹo - điều này hoàn toàn bị phá vỡ trong M2
Fabian Schmengler

Câu trả lời:


6

Thêm phụ thuộc hàm tạo mới vào lớp forntUrlModel của bạn:

function __construct(
    ...
     \Magento\Framework\UrlInterface $frontUrlModel
) {
    $this->frontUrlModel = $frontUrlModel;
}

private function getProductUrl($product, $storeCode = 'default', $categoryId = null) {
        $routeParams = [ '_nosid' => true, '_query' => ['___store' => $storeCode]];

        $routeParams['id'] = $product->getId();
        $routeParams['s'] = $product->getUrlKey();
        if ($categoryId) {
            $routeParams['category'] = $categoryId;
        }
     return $this->frontUrlModel->getUrl('catalog/category/view', $routeParams);
 }

Và sử dụng DI để tiêm phụ thuộc đúng

<type name="YouClass"> 
    <arguments>
        <argument name="frontUrlModel" xsi:type="object" shared="false">Magento\Framework\Url</argument>
    </arguments>
</type>

cảm ơn. Tôi thấy bạn tiêm UrlInterface và xác định sự phụ thuộc trong Di.xml. Tại sao bạn không tiêm \Magento\Framwork\Urltrực tiếp?
Paul Dong

Nguyên tắc phân tách giao diện, từ RẮN
KAndy

@KAndy tôi đã thử điều này .. nhưng không thể lấy url sản phẩm .. :( vui lòng gửi mã đầy đủ ở đây .. Tôi đang cố gắng tạo một cột trong lưới sản phẩm bằng liên kết giao diện sản phẩm.
Hỏi Bytes

@KAndy YouClass có nghĩa là gì? chúng ta cần phải làm cho bất kỳ lớp học ở đây. Bạn có thể vui lòng giải thích thêm để câu trả lời này có thể giúp nhiều người khác như tôi không
Rutvee Sojitra 11/12/18

7

Tôi trả lời câu hỏi của tôi. mtns_cll's trả lời câu hỏi của Magento 2 lấy url cửa hàng lối vào cho một đường dẫn trong quản trị viên làm việc cho tôi.

Tôi đăng giải pháp của mình ở đây trong trường hợp ai đó cần nó:

mặt tiền sản phẩm :

tiêm \Magento\Framework\Url $url

$url->getUrl('catalog/product/view', ['id' => $entityId, '_nosid' => true, '_query' => ['___store' => $storeCode]]);

phụ trợ sản phẩm

tiêm \Magento\Framework\UrlInterface $urlhoặc sử dụng giao diện url được kế thừa từ lớp cha.

$url->getUrl('catalog/product/edit', ['id' => $entityId, 'store' => $targetStoreId]);

mặt tiền hạng mục

tiêm `\ Magento \ Framework \ Url $ url

$url->getUrl('catalog/category/view', ['id' => $entityId, '_nosid' => true, '_query' => ['___store' => $storeCode]]);

thể loại phụ trợ

tiêm \Magento\Framework\UrlInterface $urlhoặc sử dụng giao diện url được kế thừa từ lớp cha.

$url->getUrl('catalog/category/edit', ['id' => $entityId, 'store' => $targetStoreId]);

trang cms

tiêm Magento\Cms\Block\Adminhtml\Page\Grid\Renderer\Action\UrlBuilder $rul

$url->getUrl($this->_pageModel->getIdentifier(), $targetStoreId, $storeCode );

trang cuối cms

tiêm \Magento\Framework\UrlInterface $urlhoặc sử dụng giao diện url được kế thừa từ lớp cha.

$url->getUrl(PageActions::CMS_URL_PATH_EDIT, ['page_id' => $pageId]);

cms khối phụ trợ

tiêm \Magento\Framework\UrlInterface $urlhoặc sử dụng giao diện url được kế thừa từ lớp cha.

$url->getUrl(BlockActions::URL_PATH_EDIT, ['block_id' => $blockId]);

1

Bạn có thể thử sử dụng Magento/Store/Model/StoreManager. Tiêm nó vào một hàm tạo thông qua Magento/Store/Model/StoreManagerInterface, ít nhiều như thế này:

    public function __construct(
\Magento\Store\Model\StoreManagerInterface $storeManager,
   .....
) {
   ...
$this->_storeManager=$storeManager;
}
$requestedStoreObject = $this->_storeManager->getStore($storeId);
$urlToRequestedStore = $requestedStoreObject->getUrl();

Bạn nên chú ý rằng hàm getStore()làm đối số có thể không chỉ lấy số nguyên mà còn cả chuỗi hoặc đối tượng:

/**
 * Retrieve application store object
 *
 * @param null|string|bool|int|\Magento\Store\Api\Data\StoreInterface $storeId
 * @return \Magento\Store\Api\Data\StoreInterface
 */
public function getStore($storeId = null);

Nó không làm việc cho tôi. nó trả về url phụ trợ, như http: // <domain> / admin / ....
Paul Dong
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.