[Skip Header and Navigation] [Jump to Main Content]
בית
דרופל ישראל
הבית של קהילת מפתחי ומשתמשי דרופל בישראל

Primary Links

  • בית
  • דרופל בעברית
  • חדש באתר
  • מדריכים
  • תמיכה
  • לוח דרושים
  • נותני שירות בדרופל
  • אתרי דרופל ישראליים
  • שאלות נפוצות
  • ארועים והדרכות
בית » פורומים » ישן » פיתוח רכיבים

SCOPE של משתנה בדרופל 6

tamirko, ד', 30/03/2011 - 10:01

שאלה של מתחיל :

אני בונה מודול חדש ובו אני מגדיר משתנה בצורה הבאה : global $myNewVar;

שאלתי היא : מהו ה-SCOPE של המשתנה המוגדר כך כ global ?

דוגמא יותר ספציפית :

שני משתמשים שונים מחוברים לאתר ושניהם משתמשים במודול שלי.

אחד מהם מבצע פעולה שתשנה את ערכו של $myNewVar.

האם המשתמש השני יחוש בשינוי ? - אני מקווה ומניח שלא...   - אני צודק ? 

אם הייתי רוצה שהמשתמש השני ירגש בהבדל, הייתי צריך להשתמש (למשל) ב variable_set וב variable_get. - נכון ?

אשמח אם משיהו יאיר את עיני ואו יפנה אותי לתיעוד.

 

תודה מראש.

‹ דר 6 : איפוס נתוני טופס והתעלמות מ- REQUIRED שינוי META TAGS בדפי מודול ספציפי ›
  • חברי האתר יכולים לשלוח תגובה - כניסה , הצטרפות.
תגים:
  • פיתוח רכיבים
  • פיתוח רכיבים
התמונה של אלון גולדברג

http://thedrupalblog.com/defi

נכתב ע"י אלון גולדברג ביום ד', 30/03/2011 - 18:55.

http://thedrupalblog.com/defined-variables-scope-tip

הכי טוב קוד פתוח. יותר טוב דרופל. www.drupal-expert.com

  • חברי האתר יכולים לשלוח תגובה - כניסה , הצטרפות.

תודה על התגובה המהירה. מה

נכתב ע"י tamirko ביום ה', 31/03/2011 - 09:56.

תודה על התגובה המהירה.

מה שכתוב בלינק שהפנית אותי אליו, כבר ידוע לי.
אבל עדיין לא קיבלתי תשובה לשאלותיי הספציפיות.

תודה מראש.

  • חברי האתר יכולים לשלוח תגובה - כניסה , הצטרפות.
התמונה של אלון גולדברג

http://drupal.org/node/52649

נכתב ע"י אלון גולדברג ביום ה', 31/03/2011 - 12:35.

http://drupal.org/node/52649

כל משתמש מקבל "scope" משלו. כל המשתנים נטענים לזכרון השרת עם הקריאה למודול , וכמובן לוקחים בחשבון את מערכת ה- cache . (כן, גם משתנים נשמרים ב- cache).

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

הדרך שאני הייתי מעביר מידע בין משתמשים היא באמצעות בסיס הנתונים - כפי שרשמת ( variable_set / variable_get ) ששומר לטבלת המשתנים הגלובליים - טבלתvariable

session היא דרך להעביר מידע מעמוד לעמוד - אבל הם יחודיים לכל משתמש בעצם הגדרתם.

אפשרות מעניינת שעלתה בדיון בקישור שהוספתי בנושא שאלתך "משתנים גלובליים ביחס למשתמשים במערכת" - להוסיף משתנה לאובייקט $user .

אם אתה רוצה משתנה גלובלי אחד שכשמשתמש מסויים מעדכן אותו - כל המשתמשים האחרים רואים את העדכון בטעינה הבאה של העמוד , הכי טוב זה להשתמש ב- variable_set / variable_get = לשמור בבסיס הנתונים תוך כדי שימוש אוטומטי במערכת ה cache של דרופל בכל קריאה למשתנה הגלובלי...

הכי טוב קוד פתוח. יותר טוב דרופל. www.drupal-expert.com

  • חברי האתר יכולים לשלוח תגובה - כניסה , הצטרפות.
התמונה של perelman.yuval

הscope של משתנה גלובלי הוא

נכתב ע"י perelman.yuval ביום ה', 31/03/2011 - 12:28.

הscope של משתנה גלובלי הוא לפי ריקווסט לשרת, כך שמה שמשתמש אחד יעשה לא ישפיע על המשתמש השני.

פרלמן יובל
Linnovate - Community Infrastructure Care

  • חברי האתר יכולים לשלוח תגובה - כניסה , הצטרפות.
התמונה של amitai

אני חושב שהתשובה לא כל כך

נכתב ע"י amitai ביום ה', 31/03/2011 - 13:21.

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

אמתי -- חברת גיזרה

  • חברי האתר יכולים לשלוח תגובה - כניסה , הצטרפות.

תודה. ברשותך, אני אתן דוגמא

נכתב ע"י tamirko ביום ה', 31/03/2011 - 14:05.

תודה.

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

נניח שיש לי מערך דו-מימדי myArray$ שרובו אינו משתנה לעולם, אך תאים מסוימים ממנו, משתנים בהתאם לבחירת המשתמש המחובר ואני רוצה שהבחירה/שינוי של משתמש, ישפיעו אך ורק עליו ולא על משתמשים אחרים שמחוברים כעת ובוחרים באפשרויות אחרות.

לאחר שמשתמש מבקש, אני מייצר עבורו מהמערך, טבלת HTML כך :

;theme('table', $headers, $myArray,$attributes)

 

את הטבלה אני מציג למשתמש כמובן ותוכנה רלוונטי אך ורק למשתמש זה.

 

בפתרון הנוכחי שלי , הגדרתי את המערך כ-GLOBAL

מהי הדרך היעילה והמומלצת ביותר ליצירת myArray$ במקרה שלי ? 

תודה מראש

 

 

  • חברי האתר יכולים לשלוח תגובה - כניסה , הצטרפות.
התמונה של perelman.yuval

אתה יכול להשתמש

נכתב ע"י perelman.yuval ביום ה', 31/03/2011 - 14:53.

אתה יכול להשתמש ב
$_SESSION
לדוגמא
$_SESSION['my_array] = array(1,2,3);

פרלמן יובל
Linnovate - Community Infrastructure Care

  • חברי האתר יכולים לשלוח תגובה - כניסה , הצטרפות.

אני אחדד : נניח שיש לי מערך

נכתב ע"י tamirko ביום א', 03/04/2011 - 12:08.

אני אחדד :

נניח שיש לי מערך דו מימדי ( 80 שורות על 3 עמודות ) ורוב מוחלט של התאים אינו משתנה לעולם.

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

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

תודה מראש

  • חברי האתר יכולים לשלוח תגובה - כניסה , הצטרפות.
התמונה של yakoub

לא רק שמשתמש אחר לא רואה אותו

נכתב ע"י yakoub ביום ה', 31/03/2011 - 15:41.

לא רק שמשתמש אחר לא רואה אותו משתנה אלה גם בקשות דפים נפרדים של אותו משתמש גם לא רואים אותו משתנה
http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol#HTTP_session_state

נכתב על ידי tamirko:

בפתרון הנוכחי שלי , הגדרתי את המערך כ-GLOBAL

לא מגדירים משתנה כ global אלה מצהירים עליו , בדרך כלל אין משמעות לשים global בהגדרה של המשתנה , אבל אם כן יש משמעות הרי זה אומר חפש את המשתנה ב scope שעוטף ה scope הנוכחי וזה לא הכוונה של הגדרת המשתנה
כש אתה מגדיר משתנה אתה לא רוצה שיחפשו אותו ב scope "העוטף"
כש אתה מצהיר עליו עם global אתה אומר שאתה לא מגדיר אותו אלה צריך לחפש אותו ב scope העוטף כי הוא מוגדר במקום אחר מהבלוק הנוכחי
http://il2.php.net/manual/en/language.variables.scope.php

yakoub abaya

  • חברי האתר יכולים לשלוח תגובה - כניסה , הצטרפות.
התמונה של yakoub

מה שכתבתי על global לא

נכתב ע"י yakoub ביום ה', 31/03/2011 - 23:09.

מה שכתבתי על global לא מדויק
אני חושב שיש scope יחיד ב php שהוא מוגדר כ global וזה לא ניתן ל קינון כמו שתיארתי לעצמי
לכן המלה global יכולה גם להגדיר משתנה ולא רק להצהיר עליו
http://www.php.net/manual/en/reserved.variables.globals.php

yakoub abaya

  • חברי האתר יכולים לשלוח תגובה - כניסה , הצטרפות.
התמונה של zohar

השימוש בו נדיר מאוד

נכתב ע"י zohar ביום ה', 31/03/2011 - 21:55.

השימוש בו נדיר מאוד בדרופל

ובכל זאת, לדוגמה: $user, $theme, $lang ועוד...

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

  • חברי האתר יכולים לשלוח תגובה - כניסה , הצטרפות.

אני אחדד : נניח שיש לי מערך

נכתב ע"י tamirko ביום א', 03/04/2011 - 12:07.

אני אחדד :

נניח שיש לי מערך דו מימדי ( 80 שורות על 3 עמודות ) ורוב מוחלט של התאים אינו משתנה לעולם.

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

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

תודה מראש

  • חברי האתר יכולים לשלוח תגובה - כניסה , הצטרפות.
התמונה של yakoub

נשמע כמו פרופיל של משתמש ,

נכתב ע"י yakoub ביום א', 03/04/2011 - 12:28.

נשמע כמו פרופיל של משתמש , אני לא מבין למה לא פשוט לשמור למסד נתונים במקום משתנה גלובאלי , המידע ישמר ויטען למשתנה global $user

אז או שתשתמש ב מודול content profile או תממש בעצמך hook_user

yakoub abaya

  • חברי האתר יכולים לשלוח תגובה - כניסה , הצטרפות.

זה לא פרופיל של משתמש ולא

נכתב ע"י tamirko ביום א', 03/04/2011 - 13:01.

זה לא פרופיל של משתמש ולא מדובר על נתונים שאני צריך לשמור ב-DATABASE.

אני לא רוצה להשתמש במודול אחר ולמרות שאני חדש בדרופל (אני מתכנת מאד מנוסה, אבל לא בדרופל ולא ב- PHP...), אני בטוח שאין צורך להשתמש במודול אחר. אני גם לא רוצה ליצור תלות במודול אחר.

לעניות דעתי, מדובר בפתרון מאד פשוט, אני פשוט לא יודע מהו הפתרון הנכון בדרופל...

הבהרות : 

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

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

לא מדובר על נתונים אישיים. כלומר כל משתמש שיבחר את אותן בחירות, יקבל את אותן תוצאות.

דוגמא :

נניח שמדובר על שאלון שמורכב משאלות רבות ובחירותיו של המשתמש, יופיעו בטבלת HTML .

(כל מילה בכל משפט, "יושבת" בתא נפרד בטבלת HTML )

ניקח שאלה לדוגמא : 

נניח שהמשתמש צריך להכניס את ציון המבחן הפסיכומטרי שלו ועפ"י הציון, יופיע משפט שרובו קבוע מראש: 

אם המשתמש יכניס 400   -

יתקבל המשפט : הציון שלך הוא מתחת לממוצע ציוני הפסיכומטרי בישראל

אם המשתמש יכניס 700   -

יתקבל המשפט : הציון שלך הוא מעל לממוצע ציוני הפסיכומטרי בישראל

כל המילים מלבד "מתחת" ו "מעל",  נמצאות מראש בתאי המערך והן אינן משתנות לעולם.

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

 

תודה מראש.

 

 

 

 

 

 

 

 

 

  • חברי האתר יכולים לשלוח תגובה - כניסה , הצטרפות.
התמונה של yakoub

נראה לי שהפתרון של amitai

נכתב ע"י yakoub ביום א', 03/04/2011 - 13:23.

נראה לי שהפתרון של amitai הוא המתאים ביותר

yakoub abaya

  • חברי האתר יכולים לשלוח תגובה - כניסה , הצטרפות.
התמונה של perelman.yuval

מה עם להשתמש בארגומנטים בUrl?

נכתב ע"י perelman.yuval ביום א', 03/04/2011 - 19:05.

מה עם להשתמש בארגומנטים בUrl?

פרלמן יובל
Linnovate - Community Infrastructure Care

  • חברי האתר יכולים לשלוח תגובה - כניסה , הצטרפות.
התמונה של yakoub

בעצם הפתרון של משתנה global

נכתב ע"י yakoub ביום א', 03/04/2011 - 20:35.

בעצם הפתרון של משתנה global או static לא ישמור הערך במעבר בין דפים ,
לכן יהיה צורך להשתמש ב session או ארגומנטים ל url
אפשרות דרופלית נוספת זה form_state storage

yakoub abaya

  • חברי האתר יכולים לשלוח תגובה - כניסה , הצטרפות.

שימוש בארגומנטים ב-URL, לא

נכתב ע"י tamirko ביום ב', 04/04/2011 - 09:03.

שימוש בארגומנטים ב-URL, לא נראה לי פתרון "יפה" ,מה גם שהוא מוגבל באורכו.

1. אם אני מבין אותך נכון, static נשמר רק ברמת המשתמש ולא ברמת השרת. - אני צודק ? 

תוכל בבקשה להפנות אותי לתיעוד על static בדרופל ? 

2.  מה דעתך על הפתרון הבא ?

שמירת המערך המקורי בעזרת variable_set  פעם אחת ברמת השרת ובעת הצורך, טעינתו ל-SESSION לכל משתמש בעזרת variable_get ואז מניפולציה על המערך שב SESSION

דוגמא : 

 

$_SESSION['currArray'] = variable_get('myArray',NULL);   

 

if (!isset($_SESSION['currArray'])){       

 

  variable_set('myArray',array('0' => 'aaa', '1'=> 'aaa', '2'=>'ccc', .......));

 

}

 

// Changing one cell:

 

$_SESSION['currArray']['1']='yyy';

 

drupal_set_message('array cell 1 is ' . $_SESSION['currArray']['1']);   

  • חברי האתר יכולים לשלוח תגובה - כניסה , הצטרפות.
התמונה של yakoub

פו יש הסבר על

נכתב ע"י yakoub ביום ב', 04/04/2011 - 09:37.

פו יש הסבר על static
http://www.php.net/manual/en/language.variables.scope.php

הפתרון שרשמתה נראה טוב

yakoub abaya

  • חברי האתר יכולים לשלוח תגובה - כניסה , הצטרפות.

איפה מתחילים ולאן ממשיכים?

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

להורדת דרופל בעבריתלשפות וגרסאות אחרות, Drupal.org

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

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

שלום אורח

כניסה|הצטרפות

כעת מחוברים 0 משתמשים מזוהים, ו-6 אורחים:

yanivriv הוא החבר הכי חדש בקהילה!

דרופל ישראל בפייסבוק דרופל ישראל בטוויטר דרופל ישראל ב-LinkedIn

חדש בדיונים בפורום

  • דופיניטי מחפשת מפתח PHP |‏ Dofinity
  • לא רואה דף בתוך דף |‏ hodspot
  • מחפש דרופליסט מומחה |‏ razooloo
  • שחזור דרופל |‏ taldan4040
  • מסך לבן לאחר לחיצה על שמירת תצ... |‏ taldan4040
עוד בפורום

חדש בבלוגים

  • מדריך לבנייה ועיצוב של ניוזלטר... |‏ tom
  • ecommerce module |‏ avrilev
  • הסרת שיער בלייזר |‏ Alex Borodach
  • ערכת עיצוב חדשה FontFolio... |‏ ישראל
  • Mobile Drupal - סיכום הדרכה |‏ לבבי
עוד בבלוגים

אירועים והדרכות קרובות

אין פעילויות להצגה. יאללה, מי מארגן משהו?

ללוח האירועים המלא

חדש באתרים ישראלים

  • weisscarpetcleaning |‏ tzur
  • סרוולוג - חלקי מטוסים |‏ tzur
  • בייבי-ביורן ישראל |‏ tzur
  • טבעוני תוספי תזונה |‏ morantivo
  • עוגת הגבינה של ישראל - ישראל ה... |‏ zohar
עוד אתרים ישראלים
Powered by Drupal, an open source content management system
אירוח ופיתוח האתר באדיבות לינווייט - דרופל , אנדרואיד וקוד פתוח
עיצוב, קסמי css וערכת העיצוב טנדו - תום ביגלאייזן
שותף לדרך - אמנון לבב - ייעוץ משולב
דרופל ישראל הינה חלק מרשת הקנטינה
"כללי המשחק" ותנאי השימוש באתר
[Jump to Top] [Jump to Main Content]