2011-07-18 1 views
1

Drupal Panels/PHP Access 플러그인에 문제가 있습니다.하나의 완벽한 PHP 코드 조각에서 3 개의 "복잡한"PHP 조건 결합

적어도 이제는 최종 스 니펫을 만드는 세 가지 조건을 발견했습니다. 그것의 목적은 TRUE를 반환하는 것입니다. "condition1이 TRUE"또는 "condition2가 TRUE"또는 "condition3이 TRUE"인 경우. 비슷한 질문을 많이 발견했지만, 마지막 조건은이 작업을 수행하는 올바른 방법을 찾기 위해 여기에 게시하도록합니다.

조건 1 :

// At least $view1->result has result. 
$view1 = views_get_view('sp_onglet_videos'); 
$view1->set_display('views-tab-embed_1'); 
$output1 = $view1->preview(); 
if ($view1->result) { 
    return TRUE; 
} 

조건 2 (똑같은) :

// At least $view2->result has result. 
$view2 = views_get_view('sp_onglet_audio'); 
$view2->set_display('views-tab-default'); 
$output2 = $view2->preview(); 
if ($view2->result) { 
    return TRUE; 
} 

조건 3은 더 복잡하다 : (

// Checks for content in the field field_txt_videos. 
if (isset($contexts['argument_nid_1']->data-> field_txt_videos)) { 
    $field = $contexts['argument_nid_1']->data-> field_txt_videos; 
    if (is_null($field)) { 
    return FALSE; 
    } 
    if (is_array($field)) { 
    foreach ($field as $key => $val) { 
     if (is_array($val)) { 
     $field[$key] = array_filter($val); 
     } 
    } 
    $field = array_filter($field); 
    return count($field); 
    } 
    if (is_string($field) && trim($field) == '') { 
    return FALSE; 
    } 
    if ($field) { 
    return TRUE; 
    } 
    return FALSE; 
} 

내가 깨끗한 뭔가를하고 싶은와 기능적) :

if ($view1->result && $view2->result && $field) { 
return TRUE; 
     } 

하지만 PHP 지식이 까다로울 수 있습니다. 약간의 도움이 필요합니다!

답변

0

세 번째 조건의 결과를 변수에 저장하고이 결과를 사용하여 최종 조건/쿼리를 실행하려고합니다. 그러나 함수 인 경우 세 번째 조건을 쿼리 할 수 ​​있습니다.

+0

허, 그래,이게 뭐니 뭐니해도이 "if", "return"등으로 잃어 버렸어. 찾을거야. 어떻게하는지. – elektrorl

+0

답변을 수정했습니다. 당신은 제 3의 조건에서 functiom을 만들어야합니다. – Bytemain

0

코드를 적절히 배치하고 개 줄을 많이 사용하는 것이 더 좋습니다.

그러나 PHP에는 조건문 내에서 할당을 수행하는 데 유용한 멋진 트릭이 있습니다.

if(($view1 = views_get_view('sp_onglet_videos')) AND $view1->set_display('views-tab-embed_1') AND ($output1 = $view1->preview()) AND $view1->result) return TRUE; 

그러나이 코드는 엉망입니다. 할당이 실제로 작지 않은 한 그렇게하지 마십시오. 이 간단한 보안 검사를 PHP 파일 상단에서 가져 가십시오.

<?php defined('BASE_PATH') OR die('Not Allowed'); 
+0

Xeoncross에게 조언 해 주셔서 감사합니다.하지만 http://drupal.org/node/446798에서 첫 번째 조건을 발견했습니다. 구조체가 같은 결과를 출력하지 않는다고 생각합니다. 나는 이해하려고한다. 나를 위해 변수는 if 조건 전에 선언된다. – elektrorl

+0

경로 또는 상수를 테스트하고 싶지 않습니다. 드루팔 (drupal)에 대해 잘 모르는 경우 조회 또는 DB 쿼리의 결과입니다. – elektrorl

+0

@elektrorl 조건 내에서 변수를 설정하고 그 값을 'if ($ value = hi()) {...}'로 테스트 할 수 있음을 보여 드렸습니다. – Xeoncross

관련 문제