קטע קוד: איך יודעים בהיבט שכל השדות ריקים

דרופל קוד

באתר של אחד הלקוחות שלנו צריך להציג יסודות מסוימים והיבט רק אם לפחות שדה אחד בהיבט אינו ריק.

למרבה הצער, ממשק ההיבטים העשיר כל כך של דרופל, אינו מאפשר לבצע את הנדרש. לכן נכתב הקוד הזה. דרופל מאפשר לא להציג שדה אם הוא ריק וכן לא להציג היבט אם אחד השדות בו הנו ריק. אולם, אי אפשר להגדיר בממשק עצמו שיש להציג את ההיבט רק אם לפחות שדה אחד אינו ריק.

להלן הקוד. יש לשים לב שאנו מסתמכים על כך ששמו של שדה בהיבט מתחיל במחרוזת field_field. אם מישהו מעוניין להשתמש בקוד, שיבדוק אם זה מתאים למקרה המסוים שלו. הקוד נכתב בהקשר של דרופל 7.

<?php
// Whether any of the fields in the given view is not empty.
// For views with a field in the same nid to check all fields
function any_field_not_empty($nid, $view_name, $display = 'default'){

   
$view = views_get_view_result($view_name, $display, $nid);

    foreach (
$view[0] as $property => $value) {

        if (!
is_logical_field($property)) {
                continue;
        }

        if(
$value){
                return
true;
        }
    }

    return
false;
}

// Non-logical fields are the ones which alway comes with a view like _field_data
// or contextual ones like nid
function is_logical_field($name)
{
    return
starts_with($name, 'field_field');
}

function
starts_with($haystack, $needle)
{
    return
$needle === "" || strpos($haystack, $needle) === 0;
}
?>

והרי דוגמה לשימוש שנעשה בקוד שלעיל באתר שנבנה:

<?php if(any_field_not_empty($nid, 'work_secondary_relates_to_works')) : ?>
    <div class="relates-to-box-text-third Work box-above-me">Relates to Works</div>
    <div class="ref-box-content Work">
        <?php print views_embed_view('work_secondary_relates_to_works', 'default', $nid); ?>
    </div>                 
<?php endif; ?> 

Drupal report. Permalink: http://practicall.co.il/1/node/835