node reference

הי,
בעזרת taxonomy יצרתי vocabulary שיאפשר לי לתייג תכנים (כרגיל) לדפים מסוג story.
בנוסף יצרתי דף תוכן חדש בעזרת CCK, ואחד השדות הוא node_reference.
בהגדרות השדה, אמרתי לו לבחור דפים מסוג story.

איך אני מגביל אותו ל-term מסויים מתוך ה-vocabulary החדש? (אם בכלל אפשרי)

(חיפשת ו)מצאת את

(חיפשת ו)מצאת את הפונקציה שמסננת את ה-nodes עפ"י סוג התוכן?
אם כן - העתק אותה לכאן ונראה כיצד משנים אותה באופן חכם, בלי לפגוע ביכולת השדרוג שלנו, על מנת שהיא תסנן גם עפ"י מונחים.

מישהו כבר עשה את זה ויודע איך?

זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות

כן, מצאתי

מתוך nodereference.module

<?php
/**
* Fetch an array of all candidate referenced nodes, for use in presenting the selection form to the user.
*/
function _nodereference_potential_references($field, $return_full_nodes = FALSE) {
 
$related_types = array();

  if (isset($field['referenceable_types'])) {
    foreach (
$field['referenceable_types'] as $related_type) {
      if (
$related_type) {
       
$related_types[] = " type = '". $related_type ."'";
      }
    }
  }

  $related_clause = implode(' OR ', $related_types);

  if (!count($related_types)) {
    return array();
  }

  $result = db_query(db_rewrite_sql("SELECT n.nid, n.title, n.type FROM {node} n WHERE ". $related_clause ." ORDER BY n.title, n.type"));

  if (db_num_rows($result) == 0) {
    return array();
  }

  $rows = array();

  while ($node = db_fetch_object($result)) {
    if (
$return_full_nodes) {
     
$rows[$node->nid] = $node;
    }
    else {
     
$rows[$node->nid] = $node->title;
    }
  }

  return $rows;
}
?>

נו, יפה. עכשיו

נו, יפה.
עכשיו אנחנו צריכים ללכת עוד צעד אחד אחורה ולבדוק מי קורא לפונקציה הזו, והאם בשלב הקריאה לפונקציה זו יש לנו אפשרות להתערב בקוד באופן לא חודרני.
סה"כ הפונקציה די פשוטה- היא סודקת אילו סוגי תכנים יכולים לשמש כ-reference (referenceable_types) ומושכת אותם מבסיס הנתונים, על מנת להציגם למשתמש.
בעיקרון יכולנו לשכתב אותה על מנת שתבדוק גם את שייכותם של התכנים לאוצר מילים מסויים, או למונח מסויים. השאלה היא האם אין לנו ברירה אלא לשכתב את הקוד הקיים?
במודול כ-CCK אני מאוד לא ממליץ לגעת משום שמדובר במודול מרכזי שקרוב לוודאי תשתמש בו גם בעתיד, ותרצה שהשדרוג שלך יהיה פשוט.

זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות

חפש function

חפש function _nodereference_potential_references בקוד המודול. או שתמצא את הפונקציה ישירות, או, במידה והמודול קורא לה ע"י hook מסויים, תמצא קריאה בסגנון: content_module_invoke, או משהו דומה.. קשה לי לומר בלי להכיר את המודול הזה ספציפית.
ללא ספק, חלק מעבודתו של הדרופליסט היא עבודת בילוש, לעיתים ארוכה ומייגעת משהו, אבל היא משתלמת.

זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות

הגבלה ל-term מתוך מילון בעזרת מודול category

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

אמנון מאיר לבב
בניית אתרים בדרופל, ייעוץ והדרכה

כן, אבל

node reference

אתה משתמש במודול nodereference ישן קמעא. אם תעדכן אותו תגלה שנוספה אפשרות לקבוע view כמקור לרשימת פיסות התוכן. פשוט הגדר view שבוחר stories המתוייגים במונח מסוים.

(לשימוש ב-view יש בונוס: אפשר לקבוע arguments בעזרת קוד PHP וכך רשימת פיסות התוכן עשויה להיות "דינאמית".)