【问题标题】:Prestashop 1.7 remove (Hash) #/1-size-4 from URLPrestashop 1.7 从 URL 中删除(哈希)#/1-size-4
【发布时间】:2018-09-06 23:13:03
【问题描述】:

我想从产品 URL 中删除 #/1-size-4(或任何属性)。它从任何地方将其添加到产品 URL,并且我激活了友好的 URL(以及从 URL 中删除 id 的模块),并且我已经搜索了所有代码以查看如何删除它。

是否有可能以某种方式删除它?如果是这样,我该怎么办?

【问题讨论】:

  • 这个带有哈希的链接用于产品组合。唯一的方法是不要使用产品组合,而是作为单独的产品添加。真的,我不知道你为什么要删除它。如果您使用没有所有哈希及其数据的链接,它将为您提供一个选择默认组合的产品页面。通常这对于所有 SEO 和营销手段来说已经足够了。
  • 是的,我看到它是用于组合的,我确实想保留这样的组合,但我只想将它从 URL 中删除,它是否将我带到默认组合并不重要。
  • 所以只需删除哈希及其后面的所有内容。你会得到你的网址。如果您的意思是当您的用户选择产品组合时您不想要哈希 - 这在 Prestashop 中是不可能的,因为 Prestashop 就是这样制作的。或者...您需要重新开发所有 Prestashop 组合系统 ;)
  • 很公平,是的,想从 URL 中删除它,这样客户在点击产品时就看不到它。不过谢谢:)

标签: php url hash prestashop prestashop-1.7


【解决方案1】:

抱歉迟到了!
在 PrestaShop 1.7.5.0 上测试的解决方案

您必须重写 Link 类,确切地说,是 getProductLink 方法。

  1. /override/classes/ 中创建一个名为Link.php 的新文件
  2. 将所有getProductLink方法复制到新文件中
  3. 注释此代码行:$anchor = $ipa ? $product->getAnchor((int) $ipa, (bool) $addAnchor) : '';
  4. 在后面添加此代码:$anchor = '';
  5. 清除缓存(重要)

例如,文件将如下所示:

class Link extends LinkCore
{
    /**
     * Create a link to a product.
     *
     * @param mixed $product Product object (can be an ID product, but deprecated)
     * @param string $alias
     * @param string $category
     * @param string $ean13
     * @param int $idLang
     * @param int $idShop (since 1.5.0) ID shop need to be used when we generate a product link for a product in a cart
     * @param int $ipa ID product attribute
     *
     * @return string
     */
    public function getProductLink(
        $product,
        $alias = null,
        $category = null,
        $ean13 = null,
        $idLang = null,
        $idShop = null,
        $ipa = 0,
        $force_routes = false,
        $relativeProtocol = false,
        $addAnchor = false,
        $extraParams = array()
    ) {
        $dispatcher = Dispatcher::getInstance();

        if (!$idLang) {
            $idLang = Context::getContext()->language->id;
        }

        $url = $this->getBaseLink($idShop, null, $relativeProtocol) . $this->getLangLink($idLang, null, $idShop);

        // Set available keywords
        $params = array();

        if (!is_object($product)) {
            if (is_array($product) && isset($product['id_product'])) {
                $params['id'] = $product['id_product'];
            } elseif ((int) $product) {
                $params['id'] = $product;
            } else {
                throw new PrestaShopException('Invalid product vars');
            }
        } else {
            $params['id'] = $product->id;
        }

        $params['id_product_attribute'] = $ipa;
        if (!$alias) {
            $product = $this->getProductObject($product, $idLang, $idShop);
        }
        $params['rewrite'] = (!$alias) ? $product->getFieldByLang('link_rewrite') : $alias;
        if (!$ean13) {
            $product = $this->getProductObject($product, $idLang, $idShop);
        }
        $params['ean13'] = (!$ean13) ? $product->ean13 : $ean13;
        if ($dispatcher->hasKeyword('product_rule', $idLang, 'meta_keywords', $idShop)) {
            $product = $this->getProductObject($product, $idLang, $idShop);
            $params['meta_keywords'] = Tools::str2url($product->getFieldByLang('meta_keywords'));
        }
        if ($dispatcher->hasKeyword('product_rule', $idLang, 'meta_title', $idShop)) {
            $product = $this->getProductObject($product, $idLang, $idShop);
            $params['meta_title'] = Tools::str2url($product->getFieldByLang('meta_title'));
        }

        if ($dispatcher->hasKeyword('product_rule', $idLang, 'manufacturer', $idShop)) {
            $product = $this->getProductObject($product, $idLang, $idShop);
            $params['manufacturer'] = Tools::str2url($product->isFullyLoaded ? $product->manufacturer_name : Manufacturer::getNameById($product->id_manufacturer));
        }

        if ($dispatcher->hasKeyword('product_rule', $idLang, 'supplier', $idShop)) {
            $product = $this->getProductObject($product, $idLang, $idShop);
            $params['supplier'] = Tools::str2url($product->isFullyLoaded ? $product->supplier_name : Supplier::getNameById($product->id_supplier));
        }

        if ($dispatcher->hasKeyword('product_rule', $idLang, 'price', $idShop)) {
            $product = $this->getProductObject($product, $idLang, $idShop);
            $params['price'] = $product->isFullyLoaded ? $product->price : Product::getPriceStatic($product->id, false, null, 6, null, false, true, 1, false, null, null, null, $product->specificPrice);
        }

        if ($dispatcher->hasKeyword('product_rule', $idLang, 'tags', $idShop)) {
            $product = $this->getProductObject($product, $idLang, $idShop);
            $params['tags'] = Tools::str2url($product->getTags($idLang));
        }

        if ($dispatcher->hasKeyword('product_rule', $idLang, 'category', $idShop)) {
            if (!$category) {
                $product = $this->getProductObject($product, $idLang, $idShop);
            }
            $params['category'] = (!$category) ? $product->category : $category;
        }

        if ($dispatcher->hasKeyword('product_rule', $idLang, 'reference', $idShop)) {
            $product = $this->getProductObject($product, $idLang, $idShop);
            $params['reference'] = Tools::str2url($product->reference);
        }

        if ($dispatcher->hasKeyword('product_rule', $idLang, 'categories', $idShop)) {
            $product = $this->getProductObject($product, $idLang, $idShop);
            $params['category'] = (!$category) ? $product->category : $category;
            $cats = array();
            foreach ($product->getParentCategories($idLang) as $cat) {
                if (!in_array($cat['id_category'], Link::$category_disable_rewrite)) {
                    //remove root and home category from the URL
                    $cats[] = $cat['link_rewrite'];
                }
            }
            $params['categories'] = implode('/', $cats);
        }
        if ($ipa) {
            $product = $this->getProductObject($product, $idLang, $idShop);
        }
        // $anchor = $ipa ? $product->getAnchor((int) $ipa, (bool) $addAnchor) : ''; // <-- Here is the change
        $anchor = '';
        return $url . $dispatcher->createUrl('product_rule', $idLang, array_merge($params, $extraParams), $force_routes, $anchor, $idShop);
    }
}

目前我已经实现了这个编辑,但我目前正在测试它。所以如果有什么消息我会在这里写;)

【讨论】:

    猜你喜欢
    • 2011-05-29
    • 2012-04-19
    • 2013-05-15
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 2018-01-23
    相关资源
    最近更新 更多