יש לי סוג תוכן בו ביטלתי את שדה גוף התוכן (body) כליל ע"י השארת התוית שלו ריקה בהגדרות סוג התוכן.
ישנם שדות CCK נוספים בסוג התוכן, בהם אני משתמש להצגת התוכן, בתור תקציר או מלא.
הבעיה היא שנראה שהליבה לא מודעת לאפשרות שהתקציר יבוא ממודולים נוספים, כגון CCK. בזמן בניית התוכן להצגה, ה teaser וה bodyשניהם ריקים, ולכן לא מוצג קישור read more.
יש למישהו רעיונות איפה הבעיה? למיטב הבנתי זה באג בליבה (או "תכונה בלתי רצויה"), אשמח לעזרה.
פתרון:
באופן זמני, הקוד הזה פותר לי את הבעיה:
<?php
function custom_link($type, $node = NULL, $teaser = FALSE) {
$links = array();
if ($type == 'node') {
if ($teaser && ($node->type == 'session')) {
$links['custom_node_read_more'] = array(
'title' => t('Read more'),
'href' => "node/$node->nid",
// The title attribute gets escaped when the links are processed, so
// there is no need to escape here.
'attributes' => array('title' => t('Read the rest of !title.', array('!title' => $node->title)))
);
}
}
return $links;
}
?>
גם ההצעה לבנות שדה read more באמצעות views היא טובה, אם כי אני אוהב להשתמש בתצוגת teasers אחידה עד כמה שניתן.
אני מקווה שהבאג יתוקן בגרסה 7 של דרופל אם כי אין לי אינדיקציה לכך.
בלי להסתכל בקוד (ולכן ללא
בלי להסתכל בקוד (ולכן ללא אחריות), אני מניח שהשימוש ב-body ע"י הליבה, בזמן הצגת התוכן, יוצא מנקודת הנחה שיש שדה body (ומכאן גם הטיזר שלו).
בגלל שמה שאתה עושה הוא מנהג נפוץ בקרב control freaks, ובעניין זה אני איתך, יתכן שהדבר הנכון הוא לאפשר סימון של שדה CCK כלשהו, בתור ה-Body הראשי.
פתרון אחר, אולי יותר מורכב, הוא לאפשר לכל שדה טקסט של CCK ליצור טיזר, דוגמת הליבה.
בדקת מה המצב בדרופל 7?
זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות
יתכן שהדבר הנכון הוא לאפשר
איך עושים את זה?
ואת זה?
לא, אבל יש מצב שזה ישתפר, כיוון שחלקים גדולים מ CCK (ואולי גם views) עוברים לתוך הליבה.
בכל מקרה הבעיה שלי היא קונקרטית לאתר מסוים בדרופל 6, כך שדרופל 7 אינו אופציה.
יתכן שהדבר הנכון הוא לאפשר
פאץ' לליבה? אני הייתי מנסה את הכיוון הכיוון הזה, כי זו בכל מקרה תכונה רצויה.
פאץ' ל-CCK... :-) כנ"ל
אלא אם כן הפאצ'ים האמורים כבר קיימים, ואז אתה יכול להחיל אותם בשקט ובבבטחה.
זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות
רק שאבין, לפני שאני מתחיל
רק שאבין, לפני שאני מתחיל לפצ'פץ' את הליבה - אתה מכיר את הבעיה, ומאמין שהיא בעיה בליבה של דרופל כמוני?
נראה לי שאני מבין את הבעיה,
נראה לי שאני מבין את הבעיה, כפי שתיארת אותה (יש עו"ד באולם?).
זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות
בהמשך לכסת"ח לעיל, נראה לי
בהמשך לכסת"ח לעיל, נראה לי שהבעיה והפתרון נחלקים לשניים:
זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות
זאת הבעיה שאני מדבר עליה.
בהבדל אחד: מדובר בגרסה
זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות
קראתי שוב את השאלה שלך,
קראתי שוב את השאלה שלך, וגיליתי משהו שלא שמתי לב אליו קודם: אתה מדבר על בניית התוכן לתצוגה, ובאמת נראה שיש שם התעלמות מוחלטת מכל מה שהוא לא ליבתי. אכן "תכונה לא רצויה", או ליתר דיוק "העדר תכונה רצויה".
זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות
נראה לי שיהיה יותר מהיר לדחוף
נראה לי שיהיה יותר מהיר לדחוף לינק READ MORE וטיזר משדה מסויים ע"י hook_nodeapi()
אמתי -- חברת גיזרה
כוונתך ל hook_link() ? זוהר,
כוונתך ל hook_link() ?
זוהר, בשטף הפילטרים שלך, בא לך לכתוב פילטר לפונקציות API (כיווניות + קישור)
LOL האמת... איתגרת אותי. אבל
LOL
האמת... איתגרת אותי. אבל איכשהו יש לי הרגשה שמשהו כזה כבר קיים...
המודול API לא עושה את זה?
זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות
כתבתי hook_nodeapi() בגלל
כתבתי hook_nodeapi() בגלל הטיזר.
אגב,מה לגבי שימוש ב- VIEWS?
אמתי -- חברת גיזרה
כתבתי hook_nodeapi() בגלל
לא הבנתי.
אני משתמש ב view. הבעיה היא שכשאני מציג teasers עבור פריטי תוכן מהסוג הזה, לא מוצג הקישור לקריאת ההמשך (
$node->readmoreכבוי, כי מבחינת הליבה גם התוכן המלא וגם התקציר, ריקים).ב-views אתה יכול להוסיף שדה
ב-views אתה יכול להוסיף שדה קישור לתוכן, ולתת לו את הכותרת "קרא עוד"
זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות
יש גם פאטצ' שנותן לכתוב איזה
יש גם פאטצ' שנותן לכתוב איזה לינק שרוצים - http://drupal.org/node/349178
אמתי -- חברת גיזרה
פתרון זמני (שימו לב שסוג
פתרון זמני (שימו לב שסוג התוכן מופיע בקוד, לכן פתרון זה הוא זמני):
<?phpfunction custom_link($type, $node = NULL, $teaser = FALSE) {
$links = array();
if ($type == 'node') {
if ($teaser && ($node->type == 'session')) {
$links['custom_node_read_more'] = array(
'title' => t('Read more'),
'href' => "node/$node->nid",
// The title attribute gets escaped when the links are processed, so
// there is no need to escape here.
'attributes' => array('title' => t('Read the rest of !title.', array('!title' => $node->title)))
);
}
}
return $links;
}
?>
http://drupal.org/project/cck
http://drupal.org/project/cck_teaser
עדכון: סליחה, זה מודול חדש, אבל לגירסא חמש...
אמתי -- חברת גיזרה