2011-05-12 2 views
0

내 CMS 포주로 검색과 같은 일반적인 작업을 단순화하려고합니다. CMS에는 여러 가지 모듈이 있으며 각 모듈은 동적 경로로 마스크 처리 할 수 ​​있습니다.동적 검색, 검색 결과 링크 생성 (역방향 라우팅)

전체 시스템은 상당히 견고하고 유연하지만 검색 결과 페이지가 두통을 일으키는 곳입니다.

내가 이렇게 내 검색 클래스에 기본 데이터를 던지고있어 유연하게 유지하려면 그런 다음

$search->addTable('content', array('title', 'excerpt', 'body', 'meta_keywords', 'meta_description')); 
$search->addTable('event', array('title', 'description', 'tags')); 

내 검색 클래스는 을 결과를 잘 찾을 수 이러한 변수에서 하나 SQL 쿼리를 생성 (어쩌면 '멋지게'결과 집합에 다른 테이블의 행이 포함되어 있으므로 결과가 모두 단일 배열에 있기 때문에 어느 행이 어떤 테이블에 속하는지 알 수 없으므로 '멋지게'는 지금 최상의 단어가 아닙니다)

문제는 내가 변위하고 싶을 때이다. ay 결과 페이지 위에서 언급 한 시스템 유연성 (모든 콘텐츠/모듈은 아무 것도 숨길 수 있음) 때문에 매우 어려운 각 결과에 대한 적절한 URL을 작성해야합니다.

내 질문이 매우 현지화되어 있고 현재 양식에서 대답하기에 너무 모호 할 수도 있으므로 약간 문제를 명확히하려고 노력할 것입니다. 난 당신에 대한 모범 사례 또는 내 문제에 대한 간단한 대답을 요구하지 않습니다하지만 당신은 이러한 근본적인 문제에 대해 나에게 좋은 팁을 제공 할 수 있다면 나는 매우 감사 할 것 :

  • 은 단일 쿼리 ISN '을 생산하는 것 같은데 내가 어떤 행이 어떤 테이블에 속해 있는지를 알 수 없기 때문에 (다른 테이블은 다른 URL을 만드는 방법을 의미 할 수 있기 때문에) 최선의 접근법이다. 또 다른 접근법은 각 테이블을 개별적으로 쿼리하고 결과를 다차원 배열 (키의 테이블 이름)에 저장하는 것입니다. foreach 루프 내에서 SQL을 쿼리하는 AFAIK는 허용 된 방법이 아닙니다. 단일 쿼리 내에서 테이블 이름을 반영하도록 각 결과 행을 표시 할 수 있습니까?
  • 이러한 결과에 대한 실제 (가면을 쓴) URL을 만들지는 않을 것이지만 내게는 (SEO.com/content/nice-url-slug)와 같은 매우 기본적인 것들을 표시합니다. Google은 중복으로 인해 내 사이트를 처벌 할 수 있습니다. 이는 나에게 적합하지 않습니다.

언제나처럼 닫기를 클릭하는 대신에 물어보십시오. 아마 시나리오를 좀 더 명확하게 할 수 있습니다. 고마워, fabrik.

답변

1

짧은 대답은 수십 개의 검색어를 말하지 않는 한 여러 개의 검색어를 사용하는 것이 좋습니다. 이것은 반환 된 결과가 위의 배열처럼 구조화 된 집합의 집합이 될 것이며 테이블 이름이 해당 테이블의 결과 집합에 대한 키임을 의미합니다.

코드가 어딘가에 배열되어 있다는 것을 알아야합니다. 조립되면 루프를 통해 반복적으로 각 테이블을 한 번만 쿼리 할 수 ​​있습니다. 이 루프 내에서 필요한 모든 컨텍스트 즉 테이블 이름을가집니다.

그런 다음 배열의 배열을 클라이언트가 결과로 어셈블하는 모든 배열로 반환합니다. tablename이 URL을 구성하는 데 충분하면 이동하는 것이 좋습니다. ID 열의 이름과 같은 각 테이블에 대한 추가 정보가 필요하면 각 테이블에 대한 필요한 메타 데이터를 포함하도록 결과 배열을 구조화하십시오.

전반적으로이 구조가 잘되어있어 여러 쿼리를 피하려고 노력하고 있습니다. 그것에 대해 걱정하지 마십시오.다중 쿼리의 문제점은 과 동일한 * 테이블 *이 반복적 인 쿼리를 반복 할 때 반복되는 디자인 패턴과 성능 탱크가 될 때입니다.