11

ご存知かもしれませんが、URLキーを共有する製品がある場合、URLキーには数字が追加されます。

すなわち

http://www.example.com/main-category/sub-category/product-name-**6260**.html

その6260のソース(URLに追加された#の1つ)を見つけるにはどうすればよいですか?製品ID、SKUを試しましたが、ソースが見つかりません。私が尋ねる理由は、それを見つけることができれば、特定の製品リストページにエコーする前に、文字列置換関数を作成してURLからフラッシュすることができるからです。

ありがとう。

4

3 に答える 3

22

これが発生するコードの場所に到達する前に、あなたが痛みの世界に入っていることを知っておいてください.

  1. これらの数値がどのように生成されるかについて、単純なルールはありません。店舗IDの場合もあれば、簡易商品IDの場合もあります。どちらでもない場合もある

  2. あったとしても、最初から作成されていない Magento サイトには、これを変更するカスタム機能が含まれているのが一般的です。

  3. 最終的に、Magento の人間が読める / SEO に適した URL がcore_url_rewriteテーブルに配置されているため、ユーザーが任意のテキストを挿入することが可能です。

運命の警告はさておき、探しているモデルは ですMage::getSingleton('catalog/url')。これには、Magento カタログと製品の書き換えを生成するためのロジックのほとんどが含まれています。これらのメソッドはすべて、メソッドを介してリクエスト パスを渡すことで終了しgetUnusedPathます。

#File: app/code/core/Mage/Catalog/Model/Url.php
public function getUnusedPath($storeId, $requestPath, $idPath)
{
    //...
}

このメソッドには、URL の末尾に一意の番号を作成するためのロジックが含まれています。これを完全に追跡することは、スタック オーバーフローの投稿の範囲を超えていますが、特にこの行は啓発的/落胆的です。

$lastRequestPath = $this->getResource()
    ->getLastUsedRewriteRequestIncrement($match[1], $match[4], $storeId);
if ($lastRequestPath) {
    $match[3] = $lastRequestPath;
}
return $match[1]
    . (isset($match[3]) ? ($match[3]+1) : '1')
    . $match[4];

特にこの2行

$match[3] = $lastRequestPath;
//...
. (isset($match[3]) ? ($match[3]+1) : '1')
//...

明らかでない場合、Magento が1URL に を自動的に追加し、それをインクリメントし続ける場合があります。これにより、これらの URL の生成は、生成時のシステム状態に依存するようになります。単純なルールはありません。

このファイルのその他の重要な行は次のとおりです。

if (strpos($idPath, 'product') !== false) {
    $suffix = $this->getProductUrlSuffix($storeId);
} else {
    $suffix = $this->getCategoryUrlSuffix($storeId);
}    

これ$suffixは URL の末尾にも使用されるため、これらの方法は調査する価値があります。

URL から数字を削除するだけの場合は、正規表現またはexplode/implode文字列のジガリングを使用したほうがよい場合があります。

于 2012-11-29T00:04:04.223 に答える
2

なぜこれが機能するのかはほとんどわかりませんが、これは私にとってはうまくいきました。おそらく、URL が一意でなくなるためです。マジェントver. 1.7.0.2 は、URL キーと名前が古い製品とは異なっていたとしても、新しい製品の名前に接尾辞として数字を突然追加し始めました。直感で、に行きSystem -> Configuration -> Catalog -> Search Engine Optimizations -> Product URL Suffix、デフォルト.htmlを に変更しました-prod.html。任意のサフィックスに変更できると思います。次に、ウェブサイトのインデックスを再作成し、キャッシュを更新して、プレスト! 製品の URL からすべての数字が消えていました。製品の URL はすべてcustom-product-name-prod.html. カノニカルタグも表示custom-product-name-prod.htmlされるので嬉しいです。

他の人に当てはまるかどうかはわかりませんが、うまくいくことを願っています。URL が重複している古い製品と新しい製品があり、この手順を実行する前に古い製品を無効にしていたことに注意してください。そのため、同じ URL キーを持つ 2 つの製品があり、両方が有効になっている場合、これは機能しない可能性があります。

于 2013-01-31T04:37:15.940 に答える