URL 키없이 URL 경로를 제공하는 $ _product-> getProductUrl ()


15

몇 가지 다른 Magento 사이트의 페이지에서 특정 범주의 제품 모음을 얻고 있습니다. 컬렉션을 얻는 코드는 다음과 같습니다.

        $category = new Mage_Catalog_Model_Category();
        $category->load($id);
        $collection = $category->getProductCollection();
        $collection->addAttributeToSelect('*');
        $collection->addAttributeToFilter('status', 1);
        $collection->addFieldToFilter(array(array('attribute'=>'visibility', 'neq'=>"1" )));
        $collection->getSelect()->limit(12);

        foreach ($collection as $shopProduct) :

            echo $shopProduct->getProductUrl();

        endforeach;

내 문제는 우리가 실행중인 Magento 사이트 중 하나 ProductUrl()에서 페치되고있는 URL이 같지 http://www.my site.com/catalog/product/view/id/2309/s/shopcat/category/373/않은 URL이라는 것 http://www.site.com/shopcat/product-url-key.html입니다. 그러나 다른 모든 사이트에는 원하는대로 표시됩니다.

이것이 왜 그런지 아는 사람이 있습니까? 감사! 나는 getUrlPath()너무 사용하려고했지만 아무것도 반환하지 않았다. 나는 이런 식으로 뭔가를 해결할 수 있다는 것을 알고 <?php echo $this->getBaseUrl().$shopProduct->getUrlKey().".html"; ?>있지만 그 방법은 약간 비효율적입니다!

21/03/14 편집 : 여전히이 문제가 있습니다. getProductUrl()사이트의 일부 템플릿 파일에서 원하는 URL을 검색하지만 다른 사이트에서는 검색하지 않는 것을 깨달았습니다 . 예를 들어 홈페이지에 하나의 컬렉션을로드하고 있으며 원하는 URL을 제공합니다. 그러나 getProductUrl()카테고리 뷰에서 동일한 코드로 원하는 URL을 제공하지 않습니다.


"색인 URL 다시 쓰기"를 다시 색인화하려고 했습니까?
oleksii.svarychevskyi

예 데이터를
재 색인

나는 둘 다 시도했다. 색인 관리에서 다시 색인을 생성했으며 캐시를 비웠으며 캐시는 비활성화되었습니다.
Sarah

admin-> catalof-> url rewrite management를 입력하십시오. URL 리 라이트가 있습니까? 그렇다면 그리드를 필터링하십시오. Target path-> [category / some_category_id]
mageUz

답변이 늦어 져 죄송합니다. 해당 제품에 대해 URL 재 작성이 설정되어 있으므로 site.com/shopcat/product-url-key.html 또는 site.com/catalog/product/view/id/2309/s/shopcat/ 로 이동하면 category / 373 같은 제품 페이지로 이동하면 foreach 루프가 어떤 이유로 잘못된 유형의 URL을 가져 오는 것입니다.
Sarah

답변:


18

다음과 같이 컬렉션을 가져 오십시오.

$collection = $category->getProductCollection();
$collection->addAttributeToSelect('*');
$collection->addAttributeToFilter('status', 1);
$collection->addFieldToFilter(array(array('attribute'=>'visibility', 'neq'=>"1" )));
//Where the magic happens
//this will add the url rewrite.
//addUrlRewrite can also be left without a parameter to generate url without category.
$collection->addUrlRewrite($category->getId()); 
$collection->getSelect()->limit(12);

즉, 모델에 긴 못생긴 URL 대신 URL 키를 제공하도록 알립니다 $collection->addUrlRewrite();.


질문-왜 addUrlRewrite에서 $ category-> getId ()가 필요합니까? 나는 그것이 어떤 식 으로든 작동하는 것을 본다 감사!
Ronen Ness

2
@Ness 님, 시스템 / 구성 / 카탈로그 / 카탈로그 / 검색 엔진 최적화에서 "제품 URL에 카테고리 경로 사용"이 설정되어 있는지 여부에 따라 다릅니다. 그렇지 않으면 이것을 무시하고 addUrlRewrite ()를 사용할 수 있습니다. 카테고리 경로를 설정 한 경우 카테고리 ID를 함수에 전달하면 렌더링되는 제품 URL이 카테고리 경로 앞에 추가 된 제품 URL임을 의미합니다.
Sarah

@ 마리우스 그래, 그것은 나를 위해 작동합니다.
Dhara Bhatti

8

제품 URL 얻기

사용할 수있는 3 가지 방법으로 인해 혼란 스럽습니다. 모두 Mage_Catalog_Model_Product에 있습니다.

public function getUrlPath($category=null)
public function getUrlInStore($params = array())
public function getProductUrl($useSid = null)

설명하는 가장 좋은 방법은 여러 통화의 결과를 간단히 표시하는 것입니다. http : //made.local 도메인에서 URL 키가 mondrian-large-coffee-table-set-multicolour 인 제품을 사용 하면 결과는 다음과 같습니다.

$product->getUrlPath();
    'mondrian-large-coffee-table-set-multicolour'

$product->getUrlPath($category);
    'tables/mondrian-large-coffee-table-set-multicolour'

// you cannot stop this method adding ___store to the URL, even by setting _store_to_url to false
$product->getUrlInStore();
    'http://made.local/tables/mondrian-large-coffee-table-set-multicolour?___store=default'

// you cannot stop this method adding ___store to the URL, even by setting _store_to_url to false
// note - see the "using _ignore_category" section below for an arguable bug with using this param
$product->getUrlInStore(array('_ignore_category' => true));
    'http://made.local/mondrian-large-coffee-table-set-multicolour?___store=default'

$product->getProductUrl();
    'http://made.local/tables/mondrian-large-coffee-table-set-multicolour'

$product->getProductUrl(true);
    'http://made.local/tables/mondrian-large-coffee-table-set-multicolour'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.