מודול להצגת רשימות משתמשים לפי סדר א"ב עברי - מי מכיר?
zohar, ג', 07/11/2006 - 20:06
מי מכיר מודול/snippet שמסדר את רשימת המשתמשים בדרופל לפי סדר הא"ב העברי?
המודול צריך לסדר את רשימת המשתמשים לפי שדות הפרופיל שלהם ולא לפי שם המשתמש שלהם (שלרוב אין לו כל משמעות מעשית...).
<?php /<em> SELECT u.uid, IF(v.value = "" OR v.value IS NULL, u.name, v.value) AS display_name FROM users u LEFT JOIN profile_values v ON v.uid = u.uid LEFT JOIN profile_fields f ON f.fid = v.fid WHERE (f.name = "profile_realname" OR f.name IS NULL) AND (u.uid != 0) ORDER BY display_name; </em>/ ?>
(אני מקווה שהתצוגה לא תתפקשש.)
ה"סיבוך" הוא בנסיון לעשות הכל בשאילתה אחת.
אנו מניחים ששדה הפרופיל הוא שדה רשות, ולכן, אם הוא לא קיים, אנו לוקחים במקומו את שם המשתמש. לשם כך אנו נעזרים בפונקציה IF.
אגב, האם נדמה לי, או שבשאלה שלך הדגשת את עניין האל"ף בי"ת העברי? אם זה לא מתמיין אצלך כראוי סימן שקידוד השדה בבסיס הנתונים שגוי.
וללא קשר לעיל, כדאי לדעת שלקידוד UTF-8 יש תכונה בינארית יפה: בגדול, אפשר למיין מחרוזות כאלה גם באמצעות פונקציות "טיפשות" שיודעות להתייחס רק לבתים, לא לתווים.
מודול members (נמצא ב-cvs) נותן אפשרות להציג את חברי האתר ואת הפרופיל שלהם בצורה טבלאית (לדוגמה - ראה את רשימת החברים באתר "סוכרת - טיפול טבעי" שבניתי עבור אבא שלי). אם מגדירים שדה מתאים בפרופיל, כל מי שלוחץ על השדה הזה יקבל משתמשים נוספים שהגדירו את אותו השדה בפרופיל שלהם. (נסה ללחוץ על שדה country בפרופיל שלי באתר drupal.org ותקבל משתמשים נוספים מישראל. נסה ללחוץ על אחד מהערכים בשדה intrests, לחץ על SEO ותקבל משתמשים נוספים שהגדירו את אותו תחום עניין בפרופיל שלהם).
תחקור את מודול ה-views, אפשר לעשות איתו כל חיתוך שתרצה, כולל אלפביתי.
מבחינה אסטרטגית עדיף להשתמש במודולים מוכנים! זה חוסך זמן ותקבל יותר אפשרויות ותהיה לך פחות בעיה בשדרוג.
תחקור את מודול ה-views, אפשר לעשות איתו כל חיתוך שתרצה, כולל אלפביתי.
ראשית, עם מודול views כשלעצמו לא ניתן לעשות זאת, כי הוא מציג רשימות של nodes ולא רשימות משתמשים.
אבל ניתן להתקין את מודול usernode, היוצר node עבור כל משתמש, ואז בהחלט ניתן להשתמש ב-views ולמשוך שדות מהפרופיל. לא המלצתי על כך לזהר, ולא המלצתי לו על מודול אחר, כי סברתי שזה overkill. אני יודע שהוא מתכנת והנחתי שהוא מחפש פתרון כללי, קטן ויעיל. הגישה שלך, של פסילה עקרונית של שימוש בקוד PHP, פשטנית מדי ואינה בריאה.
תחקור את מודול ה-views, אפשר לעשות איתו כל חיתוך שתרצה, כולל אלפביתי.
יש עוד דבר שמפריע לי במה שכתבת. מודול ה-views בהחלט אינו מאפשר לבצע "כל חיתוך שתרצה". חיתוך מסוג OR, למשל, הוא אינו מאפשר לך לבצע.
אני שם לב שבהודעות שלך יש מנה גדושה של "שיווק", אבל, דחילק, אנחנו באתר דרופל, ופה אפשר להוריד את המסכות ולהתמתן קצת ;-)
מעניין מאוד.
תגיד, אמנון, הרשימה הזו כוללת באמת את כל המשתמשים, או רק את אלו שאי פעם כתבו משהו באתר?
גם לפי הבנתי המודול views עובד רק על nodes והשדות של ה-profile שבו מתייחסים למחברי התכנים. אני טועה?
נתקלתי במודול הזה, אך משום שהוא השתמש ב-views של mysql (לא לבלבל עם המודול הפופולרי), שזמין רק מגרסה 5 של mysql, לא יכולתי להשתמש בו לאתר המיועד.
הגם שאני סוטה מדרכי פעמים רבות, אני מחזיק פחות או יותר באותה דיעה כשל אמנון, שאומרת שאם ניתן להתבסס על מודול קיים ולא לשכתב כלום, הרי זה משובח. משום כך העדפתי להמשיך ולחפש, כל עוד הלקוח לא לא יוצא מכליו לגמרי, בשל חוסר התכונה המבוקשת אצלו באתר (הרי בסופו של דבר זה לטובתו...).
המודול מציג את רשימת המשתמשים כטבלה, שבה כל עמודה תואמת לשדה בפרופיל, והטבלה כולה ניתנת למיון מחדש עפ"י העמודות.
המודול, בברירת המחדל, אינו מייצר טבלה, אלא משתמש ב-view של mysql. בשל העובדה שגרסה 4.X של Mysql לא תומכת ב-Views, המודול מספק גם גרסה טבלאית. על מנת להשתמש בה יש לשכתב את הקוד בשני מקומות:
בקובץ .install, החל משורה 42, יש להכניס להערה את הגדרת ה-view ולהוציא מהערה את הגדרת הטבלה שבאה מיד אח"כ
כנ"ל בקובץ .module, בשורה 69
את התוצאה לא תוכלו לראות לצערי בגלל שהלקוח משתמש ברשימה לצרכיו האישיים ולא חושף אותה לאנונימוסים שכמותכם .
יש לנו באתר מדריכים שונים, הכוללים מדריך להתקנת דרופל על המחשב המקומי או על שרת אירוח באינטרנט, כמו גם מדריכים לעיצוב ופיתוח.
בעזרת המדריכים השונים באתר ובעזרת קבוצות הדיון שלנו, אפשר למצוא את כל המידע הנחוץ להקמה והתאמה אישית של אתרי דרופל. כדאי לבדוק גם את ערוצי התמיכה הנוספים שלנו
מיון עפ"י שמות המשתמשים
נראה שהשאילתה הבאה עושה את העבודה:
<?php/<em>
SELECT
u.uid, IF(v.value = "" OR v.value IS NULL,
u.name, v.value) AS display_name
FROM
users u
LEFT JOIN
profile_values v ON v.uid = u.uid
LEFT JOIN
profile_fields f ON f.fid = v.fid
WHERE
(f.name = "profile_realname"
OR f.name IS NULL) AND (u.uid != 0)
ORDER BY
display_name;
</em>/
?>
(אני מקווה שהתצוגה לא תתפקשש.)
ה"סיבוך" הוא בנסיון לעשות הכל בשאילתה אחת.
אנו מניחים ששדה הפרופיל הוא שדה רשות, ולכן, אם הוא לא קיים, אנו לוקחים במקומו את שם המשתמש. לשם כך אנו נעזרים בפונקציה IF.
אגב, האם נדמה לי, או שבשאלה שלך הדגשת את עניין האל"ף בי"ת העברי? אם זה לא מתמיין אצלך כראוי סימן שקידוד השדה בבסיס הנתונים שגוי.
וללא קשר לעיל, כדאי לדעת שלקידוד UTF-8 יש תכונה בינארית יפה: בגדול, אפשר למיין מחרוזות כאלה גם באמצעות פונקציות "טיפשות" שיודעות להתייחס רק לבתים, לא לתווים.
RE: רשימה טבלאית של חברי האתר
שני כיוונים:
מבחינה אסטרטגית עדיף להשתמש במודולים מוכנים! זה חוסך זמן ותקבל יותר אפשרויות ותהיה לך פחות בעיה בשדרוג.
בהצלחה,
אמנון מאיר לבב בניית אתרים בדרופל, ייעוץ והדרכה
אמנון לבב - לבבי ייעוץ משולב
הדרכה, אפיון ופיתוח מקצועי של מערכות דרופל מתקדמות
בלוג בניית אתרים, תיק עבודות, המלצות
views
לבבי כתב:
ראשית, עם מודול views כשלעצמו לא ניתן לעשות זאת, כי הוא מציג רשימות של nodes ולא רשימות משתמשים.
אבל ניתן להתקין את מודול usernode, היוצר node עבור כל משתמש, ואז בהחלט ניתן להשתמש ב-views ולמשוך שדות מהפרופיל. לא המלצתי על כך לזהר, ולא המלצתי לו על מודול אחר, כי סברתי שזה overkill. אני יודע שהוא מתכנת והנחתי שהוא מחפש פתרון כללי, קטן ויעיל. הגישה שלך, של פסילה עקרונית של שימוש בקוד PHP, פשטנית מדי ואינה בריאה.
יש עוד דבר שמפריע לי במה שכתבת. מודול ה-views בהחלט אינו מאפשר לבצע "כל חיתוך שתרצה". חיתוך מסוג OR, למשל, הוא אינו מאפשר לך לבצע.
אני שם לב שבהודעות שלך יש מנה גדושה של "שיווק", אבל, דחילק, אנחנו באתר דרופל, ופה אפשר להוריד את המסכות ולהתמתן קצת ;-)
אהוב את הביקורת, כי היא תעמידך על מקומך האמיתי
תודה, מופי.
אכן יש כאן אלמנט של שיווק דרופל החוצה. וגם העדפה אישית שלי, להעדיף פתרונות שמתבססים על רכיבים ידועים.
אמנון לבב - לבבי ייעוץ משולב
הדרכה, אפיון ופיתוח מקצועי של מערכות דרופל מתקדמות
בלוג בניית אתרים, תיק עבודות, המלצות
מופי - הנה מיון אלפביתי של משתמשים בעזרת views
מופי יקר - הנה מיון אלפביתי של משתמשים בעזרת views, שבניתי עכשיו באתר דרופל ישראל. בוודאי שאפשר לעשות זאת.
בפעם הבאה תבדוק לפני שאתה שולף ופוסל.
אמנון מאיר לבב בניית אתרים בדרופל, ייעוץ והדרכה
אמנון לבב - לבבי ייעוץ משולב
הדרכה, אפיון ופיתוח מקצועי של מערכות דרופל מתקדמות
בלוג בניית אתרים, תיק עבודות, המלצות
מעניין
מעניין מאוד.
תגיד, אמנון, הרשימה הזו כוללת באמת את כל המשתמשים, או רק את אלו שאי פעם כתבו משהו באתר?
גם לפי הבנתי המודול views עובד רק על nodes והשדות של ה-profile שבו מתייחסים למחברי התכנים. אני טועה?
זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות
זה מיון של סתם משתמשים
אבל לא של המשתמשים.
פשוט עשית DISTINCT לכל הרשומות, והצגת את שדה שם המשתמש. כלומר, מוצגים ברשימתך רק המשתמשים שכתבו הודעות (ואפילו לא אלה שהגיבו להודעות).
אגב, מדי פעם מתכנתים מתלוננים על החסרון הזה של views, שהוא סובב סביב nodes:
http://groups.drupal.org/node/489
אולי זה יעזור
זהר שלום
נתקלתי בזה http://drupal.org/project/site_user_list
אולי זה מה שרצית ?
אביאור
http://dev-art.net
אביאור
http://dev-art.net
נתקלתי במודול
נתקלתי במודול הזה, אך משום שהוא השתמש ב-views של mysql (לא לבלבל עם המודול הפופולרי), שזמין רק מגרסה 5 של mysql, לא יכולתי להשתמש בו לאתר המיועד.
הגם שאני סוטה מדרכי פעמים רבות, אני מחזיק פחות או יותר באותה דיעה כשל אמנון, שאומרת שאם ניתן להתבסס על מודול קיים ולא לשכתב כלום, הרי זה משובח. משום כך העדפתי להמשיך ולחפש, כל עוד הלקוח לא לא יוצא מכליו לגמרי, בשל חוסר התכונה המבוקשת אצלו באתר (הרי בסופו של דבר זה לטובתו...).
לאחר סקירת המודולים השונים, נראה שאבחר באחד מאלה:
זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות
זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות
לבסוף בחרתי ב- Site user list
לבסוף בחרתי ב- Site user list.
המודול מציג את רשימת המשתמשים כטבלה, שבה כל עמודה תואמת לשדה בפרופיל, והטבלה כולה ניתנת למיון מחדש עפ"י העמודות.
המודול, בברירת המחדל, אינו מייצר טבלה, אלא משתמש ב-view של mysql. בשל העובדה שגרסה 4.X של Mysql לא תומכת ב-Views, המודול מספק גם גרסה טבלאית. על מנת להשתמש בה יש לשכתב את הקוד בשני מקומות:
את התוצאה לא תוכלו לראות לצערי בגלל שהלקוח משתמש ברשימה לצרכיו האישיים ולא חושף אותה לאנונימוסים שכמותכם .
זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות
זהר סטולר, לינווייט
לינווייט תשתיות תוכן קהילתיות