2014-07-19 2 views
0

나는 동적 사이트 맵 링크를 생성한다는 점에서 robots.txt 파일 을 가지고 있습니다.xml을 php의 URL을 기준으로 청크로 나눕니다.

브라우저에서 robots.txt 파일을 실행하면 다음과 같은 링크가 표시됩니다. 여기에는 각 언어에 대해 5 개의 사이트 맵 링크가 있습니다. 이유 : 데이터베이스에 10 개의 제품이 있습니다. 링크 당 2 개의 제품 만 표시하고 싶습니다. 그래서 한 페이지에 제품 수가없는 제품의 총 수를 나누었습니다.

사이트 맵 : http://demo.com/pub/sitemap_products.php? 페이지 = 1 & lang = it_IT

굵게 표시된 부분은 동적입니다.

$ Qproduct가 sitemap_products.php : 모든 언어에 대한 DB의 모든 제품의 배열을 반환에

코드입니다. 그래서 벨로우 루프는 사이트 맵 URL에 언어에 대한 제품 링크가있는 xml을 생성합니다.

예를 들어. 링크가

사이트 맵 인 경우는 IT 언어에 존재하는 모든 제품을 생성합니다 http://demo.com/pub/sitemap_products.php?page=1&lang=it_IT

. 현재 생성 된 xml 링크는 url에서 얻은 언어를 기반으로합니다. 하지만 Sitemap 링크 당 2 개 제품의 XML 덩어리로 나누고 싶습니다. 내가하고자하는 것을

while($Qproduct->next()) 
{ 
    if(!isset($page_language[$Qproduct->valueInt('language_id')])) 
    { 
     $page_language[$Qproduct->valueInt('language_id')] = mxp_get_page_language($MxpLanguage->getCode($Qproduct->valueInt('language_id')), 'products'); 
    } 
    if($Qproduct->valueInt('language_id') == $QproductLang->valueInt('languages_id')) 
    { 
     $string_to_out .= '<url> 
       <loc>' . href_link($page_language[$Qproduct->valueInt('language_id')], $Qproduct->value('keyword'), 'NONSSL', false) . '</loc> 
       <changefreq>weekly</changefreq> 
       <priority>1</priority> 
      </url>'; 
    } 

} 

대신 모든 10 개 제품 페이지 = 1 (사이트 맵 링크에서 참조)를 XML로 연결할 때 나에게 XML 정확히 두 제품 링크를 제공하도록 조건을 적용한다.

마찬가지로 페이지 = 2 인 경우 다음 2 개 제품을 표시해야합니다. 등등.

나는 내가 적용하기로되어있는 조건에서 약간 혼란 스럽다.

도와주세요.

답변

0

우선 XML 라이브러리를 사용하여 문자열 연결이 아닌 XML을 만듭니다. 예 : 귀하의 경우

$loc = href_link($page_language[$Qproduct->valueInt('language_id')], $Qproduct->value('keyword'), 'NONSSL', false); 

$url = new SimpleXMLElement('<url/>'); 
$url->loc = $loc; 
$url->changefreq = 'weekly'; 
$url->priority = 1; 

, 당신도 쉽게 바로 그러한 요소를 반환하고 함수에 그 래핑 수있는 두 개의 매개 변수가있는 : $Qproduct$page_language (문자열이 아닌 배열()!).

하지만 요점은 루프에 대한 질문과 필터링 및 관심있는 요소에 대한 루프 내에서의 네비게이션입니다.

당신이 그들에 걸쳐 반복하여 모든 결과에서 작동하는 모든의

첫째, 이미

while ($Qproduct->next()) 
{ 
    $condition = $Qproduct->valueInt('language_id') == $QproductLang->valueInt('languages_id'); 
    if (!$condition) { 
     continue; 
    } 
    ... 
} 

이 :

while ($Qproduct->next()) 
{ 
    ... 
} 

그런 다음 당신은 당신이 특정 언어의 링크에만 관심이 있다고 말

모든 요소를 ​​필터링합니다. 에 속하지 않으므로에 관심이 있습니다. 어떤 요소를 추적하고 결정할 지 결정해야 할 부분 :

$page = 1; 
$start = ($page - 1) * 2; 
$end = $page * 2 - 1; 

$count = 0; 

while ($Qproduct->next()) 
{ 
    $condition = $Qproduct->valueInt('language_id') == $QproductLang->valueInt('languages_id'); 
    if (!$condition) { 
     continue; 
    } 

    $count++; 
    if ($count < $start) { 
     continue; 
    } 

    ... 

    if ($count >= $end) { 
     break; 
    } 
} 

는 다른 방법으로, 대신에게 자신의 모든 시간을 쓰고, $Qproduct 반복하고 사용 FilterIterator 필터링 및 페이지 매김을위한LimitIterator에 대한 반복자을 만들 수 있습니다.

관련 문제