דרישה של לקוח:
* מערכת יש משתמשים + מנהלים
* למשתמשים יש content profile עם (מלא מלא מלא...) שדות (מומש באמצעות cck).
* מנהל המערכת יכול ליצור משתמשים ולהזין את ה־content profile שלהם
* יהיה צורך להכניס כמו רבה של משתמשים במכה, ולכן צריך להיות workflow מסודר שעובר בין הטופס של יצירת משתמש והכנסת הפרטים שלו.
הבעייה היא עם הדרישה השלישית. כשאתה מנסה ליצור node שמוגדר בתור content profile הוא תמיד משוייך למשתמש שלך. כשדיברתי עם yhager הוא הציע לבדוק איך content profile מנסה לתפוס את ה־hook_node ואז לבצע hook חדש יותר "חזק".
יש לי מימוש אחר, אבל אני לא מרוצה ממנו, יאללה, תקטלו אותי ותגידו לי איך אפשר לשפר:
<?php
function blabla_menu()
{
$items['new-supplier'] = array(
'type' => MENU_CALLBACK,
'title' => t('Supplier'),
'access callback' => 1,
'page callback' => 'drupal_get_form',
'page arguments' => array('blabla_new_supplier'),
);
return $items;
}
function blabla_new_supplier()
{
$form = user_register();
$form['account']['#title'] = t("Supplier name");
$form['account']['status'] = null;
$form['account']['roles' ] = null;
$form['locale'] = null;
$form['destination'] = null;
$form['#validate'] = null;
// $form['destination'] = "new-supplier";
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Create supplier'),
);
return $form;
}
function blabla_new_supplier_submit( $form, &$form_state )
{
// get the rid from text, WTF doesnt drupal have such function? does it?
$role_name = 'supplier';
$member_role = db_fetch_object(db_query('SELECT rid FROM {role} WHERE name = "%s"', $role_name ));
if (!$member_role){
drupal_set_message( t("Borked installation, no !role role defined",
array('!role'=>$role_name)
));
return;
}
$form_state['values']['status'] = 1;
$form_state['values']['roles' ] = array( $member_role->rid => $role_name);
$form_state['values']['locale'] = 'he';
$form_state['values']['init']= $form_state['values']['name'];
$new_user = user_save( NULL, $form_state['values'] );
$supplier_details = new stdClass();
$supplier_details->uid = $new_user->uid;
$supplier_details->title = $form_state['values']['name'];
$supplier_details->type = 'supplier_details';
$supplier_details->status = 0;
module_load_include('inc', 'node', 'node.pages');
node_object_prepare($supplier_details);
node_save($supplier_details);
// WTF?
$supplier_details->uid = $new_user->uid;
node_save($supplier_details);
// <a href="http://drupal.org/node/247585#comment-1295530
" title="http://drupal.org/node/247585#comment-1295530
">http://drupal.org/node/247585#comment-1295530
</a> // drupal documentation really SUX
$form_state['redirect'] = array("node/{$supplier_details->nid}/edit", 'destination=new-supplier');
}
?>
פתרון לא רע. יצא לך קוד
פתרון לא רע. יצא לך קוד דרופלי! כל הכבוד :)
כמה הערות:
1) ההדבקה נשברה פה. כמו כן,
1) ההדבקה נשברה פה. כמו כן, התצוגה המקדימה לא מציגה נכון את תגיות code ולכן אין לי אפשרות להתסכל על הפוסט שלי לפני שליחה. אבל בלי קשר, זוהר כבר העיר לי שהאינדנטציה שלי לא נכונה, או לא מתאימה ל־code standard של דרופל.
אני משתמש ב־tab והוא מוגדר כ־8 רווחים, ואילו ה"code standard" של דרופל קובע הזחה של שני רווחים. אני רוצה לראות הזחות גדולות ככה האפשר, כי אחרי 9 שעות שאני על המחשב, אני לא מבדיל בין רמה שלישית ורביעית של אינדנטציה (קורה לי עם קוד של בריאן, שהוא כן מקפיד על ההזחה התקנית).
2) נו, באמת, 'access arguments' בקוד שהוא proof of concept?
3) גנבתי את זה מ־user module, וזה לא ממש מעניין אותי כי יש אימות שמגיע כבר עם user_register
4) תודה! זה מסביר המון!
5) מוזר, למה כשמשתמשים ב־form-state לא צריך לשים את ה־#?
א. סבסקרייבינג :-) ב. באיזה
א. סבסקרייבינג :-)
ב. באיזה אדיטור אתה עובד?
| פרקטיקול - בונים לך אתר דרופל | קורס דרופל! | עזרה מידית בקבוצה שלנו בפייסבוק! | מכללת קוד פתוח
אני משתמש ב־kate4. למעשה
אני משתמש ב־kate4. למעשה אפילו תיקנתי אותו בעקבות העבודה עם דרופל... (נו טוב, אני גם זה שסידר חלקים מבעברית שם, אבל זה סיפור אחר).
ציפית לשמוע משהו מגניב כמו "eclipse"? :)
קנינו פה רישיונות של phped של (חפש באינטרנט...), בינינו? מוצר מצויין, וזה החזיק אותי כמה שבועות בוויסטה במקום לינוקס. אני מאוד מרוצה ממנו. כשאני באמת צריך לדבג את דרופל, אני משתמש בו ומתחיל לעבור שורה שורה בקוד.
נו, באמת, 'access arguments'
ביקשת הערות, ולא רציתי שתצא בלי כלום :)
שם יש ולידציה לפני ה submit. אני לא בטוח שאתה לא עוקף אותה אצלך.
האמת? לא שמתי לב בכלל, ואני לא יודע את התשובה. צריך לחפור קצת ב FAPI בשביל לגלות..
תתפלא, אבל אתה רואה את כל
תתפלא, אבל אתה רואה את כל הקוד הרלונטי פה. אני לא עוקף שום ואלידציה פה..
דרך אגב, אחד הלקוחות שלנו ביקש להוציא באתר הזה את ה־JS שיש ברישום. נחש איך עשיתי את זה? :)
אני משתמש ב־tab והוא מוגדר
מה שטוב בסטנדרט זה לא שהוא הכי טוב, או הכי נח, אלא שהוא אחד. ברגע שיש לך סטנדרט אחד, ולמישהו אחר סטנדרט אחר, זה כבר בלגן. אם הקריאוּת של הקוד חשובה לכם, תצטרך להתיישר לפי הסטנדרט הקיים.
מיליון זבובים ב ד י ו ק בגלל
מיליון זבובים
ב ד י ו ק בגלל זה, אני מגדיר הזחה מאוד גדולה, כי אחרי כמה שעות של הסתכלות על קוד אני לא רואה כלום. לפחות בקוד שלי אני כן רואה. למזלי, (או למזלם של אחרים) אני לא נאלץ לגעת בקוד של מודולים שאני לא כותב.
אם וכאשר אני צריך לגעת בקוד של אחרים, אני עושה את זה לפי הדרישות המקובלות. כשאני אוציא מודול - מבחינתי, אין בעיות שבדרופל הוא לא יתקבל בגלל משהו מפגר כמו "שני רווחים מול טאב". הקוד יהיה חופשי וזמין לכולם בלי קשר.
אתה כמובן צודק בכך שתוכו של
אתה כמובן צודק בכך שתוכו של הקוד חשוב יותר מהזחתו. העניין הוא שכשאנשים רואים קוד מבולגן (=לא לפי מה שהם מצפים ורגילים לראות בדרופל), הם בד"כ נמנעים מלהתעסק איתו, וכך אתה מפסיד את הרווח של הקוד הפתוח - עוד אצבעות לקידוד, ועיניים לדיבוג.
זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות
רק כדי לסבר את אוזניכם -
רק כדי לסבר את אוזניכם - דיונים מסוג זה היו גם נחלתם של מקודדים בטכנולוגיית מיקרוסופט עד סוף שנת 2005.
העורך Visual Studio שיצא אז איפשר שינוי של מספר תווי ההזחה על פי העדפות המשתמש - ברמת התצוגה! כיוון שכך, באותה הזדמנות דרסו את פעילות מקש TAB ושינו ל-4 רווחים - שזה התקן של ההזחה של קוד מיקרוסופט.
בסופו של דבר, הכי חשוב זה לשמור על עקביות - אם התחלת עם 3 רווחים - תעשה כך בכל מקום. לחילופין, הגדר את TAB בעורך הקוד שלך למספר מסוים.
כשאני רואה תלמידים שלי לא עושים אינדנטציה - אני לא עוזר להם בבעיה שהם פנו בגללה! לא כי אני מניאק (לזה יש סיבות אחרות) אלא משני טעמים: 1. תתאמץ בעצמך לפני שאתה מבקש ממני להתאמץ בשבילך; 2. אולי כשתסדר את הקוד תמצא את הבעיה בעצמך.
נקודה אחרונה - קיים רכיב צד שלישי לרכישה לקידוד ודיבוג PHP בתוך VS2008 למכורים לעורך העשיר והכבד.
| פרקטיקול - בונים לך אתר דרופל | קורס דרופל! | עזרה מידית בקבוצה שלנו בפייסבוק! | מכללת קוד פתוח
ברוך הבא לעולם המופלא של
ברוך הבא לעולם המופלא של תחילת שנות התשעים... תחפש באינטרנט אודות vim modeline. .. ואז תבין שיש את זה גם עבור emacs ועם עבור kate... וזה נשמר פר קובץ. זה אומר שאתה יכול לקבל הזחה שונה בכל פרוייקט.
כמובן שלא משתמשים בזה, כי החלק הגדול של המפתחים של דרופל בורים ולא מסוגלים להבין מה באמת הדרישות מפיתוח תוכנה ברמה שאנחנו צריכים עבור פרוייקט מסדר גודל כזה. סתם, משהו שעולה לי בראש: מה זה cvs? מילא svn, אבל בינינו, אני כבר רואה צורך במערכת מבוזרת כמו git.
למשל, אני מושך מודול בפיתוח ואני צריך לעשות לו שינויים מקומיים. כרגע, אתה עושה fork ואז אתה לבד ואתה שולח טלאי והוא עובד עבור גרסה מסויימת ואז זה נדפק. ואז אתה נעול בעולם משלך במקום לדבר עם העולם החיצון וקורה בדיוק מה שזוהר מזהיר ממנו בתגובה קודמת. מי שלא מאמין, שיחפש ב־issues של views2 את ה־css של תום שאני מנסה לדחוף upstream כה חודשים.
שלא תבינו, דברים מטפטפים לאט לאט למעלה, אבל דברים קטנים (טלאי קטן שלי נכנס ל־cck בגרסה האחרונה, אחד ל־devel לפני שתי גרסאות), אבל עדיין התיקון ל־views2 לא נכנס - וזה סופר חשוב.