2014-09-05 3 views
0

현재 Joomla에서 동적 목록을 생성하는 작업 코드가 있습니다. 이것은 내가 개발중인 퀘스트 시스템의 일부입니다. 각 기사 (퀘스트)에는 사용자 지정 필수 구성 요소 값이 할당되어 있습니다. 필자는 Fields Attach라는 확장을 사용하여 이러한 값을 할당했습니다.이 속성을 사용하여 사용자 지정 아티클 속성을 정의하고 데이터베이스에 저장할 수 있습니다. 아래의 코드는 prereq 값이 0 인 모든 퀘스트 또는 완성 된 퀘스트 테이블에있는 퀘스트의 기사 ID와 일치하는 prereq 값을 가진 퀘스트를 나열합니다.배열에있는 모든 값이 테이블에 있는지 확인하십시오.

지금 사용자가 퀘스트를 제출하면 완료된 퀘스트 테이블에 기사 정보 (ID, 제목 등)가 저장됩니다. 아직 완료되지 않은 퀘스트의 ID와 일치하는 퀘스트가있는 경우 퀘스트가 표시되지 않습니다. 다행히도 그것은 의미가 있습니다.

내 질문은 다음과 같습니다. 어떻게 기사 ID 배열을 저장할 수 있습니까? 예를 들어 특정 퀘스트에 여러 가지 전제 조건이 필요하면 해당 퀘스트에 1, 2, 3 같은 것을 할당 할 수 있습니다. 그렇다면 저장된 배열의 모든 값이 완성 된 퀘스트 테이블에 있는지 확인하려면 어떻게해야합니까? 이 시스템을 작동 시키려면 여러 전제 조건을 퀘스트에 할당 할 수 있어야합니다. 그것은 내 현재 코드를 표시하는 데 도움이 될 수 있습니다 :

$query = "SELECT c.id, c.title, c.catid, r.user_id, r.prereqID, f.fieldsid, f.articleid, f.value FROM arp2i_fieldsattach_values AS f 
LEFT JOIN arp2i_content AS c 
ON f.articleid=c.id 
AND f.fieldsid=5 
AND f.value!=0 
LEFT JOIN arp2i_completed_quests AS r 
ON r.user_id = $userID 
ORDER BY f.articleid, c.id"; // prepare query 

$db = &JFactory::getDBO(); // get database object 
$db->setQuery($query); // apply query 
$prereqs = $db->loadObjectList(); // execute query, return result list 

목록을 표시하는 PHP :

이 내가 목록을 컴파일하기 위해 사용하고 쿼리입니다

foreach ($prereqs as $prereq){ // loop through articles 

if ($prereq->fieldsid == 1) { 
$questXp2 = $prereq->value; 
} 

else if ($prereq->fieldsid == 3) { 
$hexValue2 = $prereq->value; 
} 

else if ($prereq->fieldsid == 4) { 
$image2 = $prereq->value; 
} 

if ($prereq->catid == $catID 
&& $prereq->prereqID == $prereq->value) { 

echo '<div class="questBlock" style="background-color:' . $hexValue2 . ';">' . '<a class="questLink" href="http://localhost/quest/index.php/quests/' . $prereq->articleid . '-' . $prereq->c.title . '">' . '<img src="images/documents/' . $prereq->articleid . '/' . $image2 . ' " />' . $prereq->title . '<span class="xpFloat">' . $questXp2 . ' XP' . '</span>' . '</a>' . '</div>' ;} 

} 

명확히하기는, 기사 ID가 1, 2, 3, 4 인 4 개의 퀘스트가 있다고 가정 해 봅시다. 퀘스트 4에 1, 2, 3의 전제 조건 값을 부여합니다. 그러면 퀘스트 1, 2 및 3이 표시 될 때까지 퀘스트 4가 표시되지 않습니다. 3이 완료되었습니다. 어떤 도움이라도 대단히 감사하겠습니다.

답변

0

데이터베이스 배열에 저장된 퀘스트에 따라 기사를 표시하기 전에 유효성 검사를 추가하고 PHP in_array() 함수를 사용하여 비교할 수 있습니다.

<?php 
$os = array("Mac", "NT", "Irix", "Linux"); 
if (in_array("Irix", $os)) { 
    echo "Got Irix"; 
} 
if (in_array("mac", $os)) { 
    echo "Got mac"; 
} 
?> 

행운을 빕니다 :

다음은 기본 구문의 예입니다!

1

데이터베이스에서 모든 퀘스트를 선택한 다음 필요 조건에 따라 필터링하려면 prereqID 필드를 VARCHAR(512) (또는 다른 적절한 크기)로 변경하고 필수 구성 요소의 배열을 JSON으로 인코딩 된 형식으로 저장하십시오 끈. PHP 함수 json_encodejson_decode을 참조하십시오.

데이터베이스에있는 퀘스트 개수에 따라 최적의 아이디어는 아니지만 구현이 가장 쉽습니다. 나는 '돈 때문에

CREATE TABLE arp2i_prereqs (article_id INT , prereq_id INT); 

내가 여기 INT을 사용 :

또 다른 가능성은 다음과 같이 자신의 전제 조건으로 퀘스트를 매핑하는 새로운 n:m - 테이블 arp2i_prereqs를 생성 한 후 테이블 arp2i_completed_quests에서 필드 prereqID을 제거하는 것입니다 귀하의 기사 ID의 정확한 데이터 유형을 알지 못합니다. 그에 맞게 변경하십시오.

각 전제 조건에 대해 기사를 해당 전제 조건에 매핑하는 레코드를 해당 테이블에 삽입하십시오.

article_id prereq_id 
---------------------- 
     4   1 
     4   2 
     4   3 

완전 외부에 있는지 확인하여 DB에서 퀘스트를 선택하면이 테이블에 가입하거나 전제 조건이없는 그 퀘스트를 필터링 할 수 있습니다 : 귀하의 경우에는 그 같을 것이다.

관련 문제