2012-11-28 14 views
11

Jak wiadomo, jeśli masz produktów, które podzielają klucza url, klucz url będzie mieć cyfrę dołączoną do niego:Magento - Usuwanie numerów w url klucz/produktu url

tj

http://www.site.com/main-category/sub-category/product-name- .html

Jak znaleźć źródło tego 6260 (które jest jednym z # dołączonych do moich adresów URL)? Próbowałem identyfikatora produktu, sku, nie mogę znaleźć jego źródła. Powodem, dla którego pytam, jest to, że jeśli uda mi się go znaleźć, mogę utworzyć funkcję zamiany ciągów znaków w celu wypróżnienia jej z adresów URL, zanim wykonam echo na niektórych stronach z listą produktów.

Dzięki.

+0

Czy zajrzałeś do Przepisów URL w obszarze administracyjnym? Od [this] (http://stackoverflow.com/questions/5019584/magento-puts-1-in-my-urls-can--remove-programatically) post na SO, az tego, co widziałem ja, to ma to coś wspólnego z Przepisami URL-i i kwestią indeksowania. – CCBlackburn

+0

Moją obawą jest przejęcie kontroli nad witryną z * tysiącem * konfigurowalnych produktów (co powoduje duplikaty kluczy url) i nikt się tym zajął wcześniej. Nie jestem pewien, czy istnieje sekcja administratora, która rozwiązuje to za jednym zamachem. Obawiam się, że w przeciwieństwie do tego, o którym mówisz, moje adresy URL z cyframi są dynamiczne i nie ma prawdziwego wzoru, jaki mogę znaleźć. Dlatego zastanawiam się, czy istnieje dynamiczny sposób, aby dowiedzieć się, skąd pochodzi dynamicznie dołączana cyfra. To jest moja troska. Jest oczywiście funkcja, która kontroluje to ... Dziękuję. – Joel

+0

Po prostu pomyślałeś, czy klucz adresu URL do konfigurowalnego produktu różni się od prostego produktu? Jeśli nie, to spowoduje to również problemy – CCBlackburn

Odpowiedz

21

Zanim przejdziemy do miejsca w kodzie, w którym to się dzieje, należy poinformować, że wkraczasz w świat bólu.

  1. Nie ma prosty reguła, jak te numery są generowane. Są przypadki, w których jest to identyfikator sklepu, są przypadki, w których jest to prosty identyfikator produktu. Nie ma przypadków, gdzie jest to ani

  2. Nawet jeśli nie było, to jest wspólne dla nie-od-podstaw stron Magento zawierać niestandardowe funkcje, które zmienia ten

  3. Ostatecznie, ponieważ czytelny dla człowieka/SEO przyjazne adresy URL Magento są zlokalizowane w tabeli core_url_rewrite, że to możliwe, by ludzie mogli wstawić dowolny tekst

Ostrzeżenia zagłady na bok, model szukasz jest Mage::getSingleton('catalog/url'). Zawiera większość logiki generowania katalogu Magento i przepisywania produktów. Wszystkie te metody kończą się przekazaniem ścieżki żądania za pomocą metody getUnusedPath.

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

Ta metoda zawiera logikę do tworzenia unikalnego numeru na końcu adresu URL. Śledzenie tego w całości jest poza zakresem stosu przepełnienia stosu, ale ta linia w szczególności jest oświecająca/zniechęcająca.

$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]; 

W szczególności, te dwie linie

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

W przypadku, gdy nie jest oczywiste, istnieją przypadki, w których Magento będzie automatycznie dołączyć 1 do adresu URL, a następnie kontynuować ją zwiększyć. Powoduje to, że generowanie tych adresów zależy od stanu systemu, gdy zostały wygenerowane - nie ma prostej reguły.

Pozostałe linie to w tym pliku są

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

Ten $suffix będą wykorzystywane na końcu adresu URL, tak więc te metody są warte zbadania.

Jeśli wszystko, co próbujesz zrobić, to usunąć cyfry z adresu URL, możesz być lepiej z wyrażeniem regularnym lub niektórymi z nich explode/implode.

+1

Warto zauważyć, że w wersji 1.7 występuje błąd powodujący, że rolki Magento zawsze generują nową wartość dla dowolnego produktu, który ma zduplikowaną nazwę. Bez względu na to, czy coś się zmieniło od czasu uruchomienia ostatniego reindeksu. –

+0

@Cags Who what bug how? –

+0

Przepraszam, hit post przez przypadek. Trudno pisać na telefonie podczas jazdy autobusem. Zaktualizuj z większą ilością szczegółów. –

2

Nie mam pojęcia, dlaczego to działa, ale to działało dla mnie. Najprawdopodobniej dlatego, że sprawia, że ​​adresy URL są nieunikalne. Magento ver. 1.7.0.2 nagle zaczął dodawać cyfry jako sufiksy do nazw moich nowych produktów, nawet jeśli ich klucze url i nazwy różniły się od starych produktów. W przeczuciu przeszedłem do System -> Configuration -> Catalog -> Search Engine Optimizations -> Product URL Suffix i zmieniłem domyślną .html na -prod.html. Sądzę, że możesz go zmienić na dowolny sufiks, jaki chciałeś. Następnie ponownie zindeksowałem moją witrynę, odświeżoną pamięć podręczną i presto! Wszystkie liczby zostały usunięte z adresów URL produktów. Adresy produktów mają teraz format custom-product-name-prod.html. Tag kanoniczny pokazuje również custom-product-name-prod.html, więc jestem podwójnie szczęśliwy.

Nie wiem, czy będzie działać dla innych, ale mam nadzieję, że tak. Zauważ, że mam starsze i nowe produkty z podwójnymi adresami URL i że wcześniej wyłączono stare produkty. Więc jeśli masz 2 produkty z tym samym kluczem url i oba są włączone, to może NIE działać dla ciebie.

Powiązane problemy