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

  1. יישור אוטומטי של פסקאות לפי תוכנן - זה דבר בסיסי לגמרי - ואני לא מוצא אותו כאן - רואים את זה כבר ברמת הממשק הניהול שם יש פסקאות שלמות בכל דף שעוד לא תורגמו - ומייושרות בהפוכה! אבל באמת, אי אפשר לצפות ממשתמשים לכתוב DIV עם כיווניות כל פעם שהם מצטטים איזה מאמר באנגלית.. אז אני לא רק מתלונן - הוספתי כמה שורות למודול markdown וזה חביב ברמת התוכן הכתוב - אבל ברמת הממשק זה לא עוזר.. ויש לי הרגשה שאולי מישהו יתן כיוון ואני לא אמציא את הגלגל.

  2. מישהו מעוניין שנתעוור? מה זה הגודל פונטים הקטנצ'יק הזה.. כל העיצובים שניסיתי לשחק ב-CSS שלהם או אפילו פשוט ברמת הדפדפן (CTRL+) מתחרבשים די מהר כשמגדילים את הפונטים ולו במעט.. (נסו להגדיל פונטים באתר הזה למשל) האם מישהו מכיר עיצוב כל שהוא שמאפשר לא ליגוע במסך עם האף? phpbb סובל אף הוא מאותה בעייה - יש כמה עיצובים בוורדפרס שאיכשהו עוברים אבל הייתי גם שם מגדיל בעוד 10%.

  3. admin menu המודול האהוב והשימושי כל כך - בעיצובי RTL, מתחרבש לו - האם יש גירסה עברית איפשהו? בכלל האם יש דרך כמו בג'ומלה - שיהיה ממשק ניהול בעיצוב ושפה+יישור אחרים מהאתר??

בתודה ובאהבה.
אופק

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

אנחנו מדברים על דרופל 6, נכון?

2) אני בפיירפוקס - מגדיל רק טקסט, או את כל האתר הזה למשל - זה או גולש מחוץ למסך - או שכל הבלוק המרכזי קופץ מתחת לתפריט.. אני ברזולוציה רגילה של 1024 על 768 עם פונטים גדולים של ווינדוס..

3) תודה אכן עובד עכשיו. לגבי "עיצוב עמודי ניהול" - זה לא ממש עוזר - כי עדיין ברגע שאני מגדיר את שפת האתר כעברית - אז זה עושה RTL לכל האתר, כולל הניהול - ולא משנה איזה עיצוב.. כמו כן, אני הרי מעוניין ששפת עמודי הניהול תהיה אנגלית, ושפת האתר תהיה עברית.. זה לא די סטנדרטי מה שאני רוצה?

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

אפשר גם להתחכם ולשנות את הקישור לאדמין כך שהוא יפנה ל - en/admin

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

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

  1. אני לא מכיר אפשרות כזו. יכול להיות שהשורות שהוספת יועילו לכולם. מהן?
  2. נראה לי שזה שילוב של הגדרות המסך שלך, ושל הגדרות CSS כלשהן. דווקא בגרלנד, העיצוב הדיפולטיבי שכולנו אוהבים לשנוא, הטקסט גדל בצורה מרשימה. בכל מקרה, הייתי מחפש את הפתרון בשינוי הגדרות CSS.

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

  1. באמת אף אחד עוד לא עשה את זה או משהו דומה? אז כולם "מסתדרים" עם פסקאות שלמות של אנגלית מיושרות לימין? או שכולם כותבים DIV כל פעם?

  2. אשמח לקישור לאתר דרופל עברית בו יש פונטים גדולים ובהירים.. אתן דוגמא לגודל שאני מתכוון - (שנראה אחיד בכל המחשבים שבדקתי כולל את זה)
    http://amirim.com/eco/he
    זה בערך פי שתיים יותר גדול מהגופן בו אני כותב עכשיו בתיבת הטקסט. כמעט כמו הכותרות הראשיות כאן..

  1. כנראה שלא. נשמח אם תשתף בפתרון שלך.
  2. ראה "אתרי דרופל ישראלים" למעלה. שים לב שאין מגבלות ממש על העיצוב. ז"א אין דבר כזה עיצוב "דרופלי" - אתה חופשי לעשות בו כרצונך, או לכתוב אותו מאפס. תבדוק את tendu, שנכתב בדיוק לצורך זה (כתיבת עיצובים מודעים לעברית).

אני משתמש במודול fckeditor ושם אפשר להחליט לאן ליישר את הפסקה.

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

הדרך הפשוטה היא להשתמש בעורך ויזואלי שתומך בRTL כמו TinyMCE וכו'.

לגבי גדלי פונטים, כמה בדיוק אתה מנסה להגדיל את הפונט? לפי הגדרות תקני נגישות לרמה הבסיסית מספיקה אפשרות להגדלה ל-150%, ולרמות גבוהות יותר הגדלה ל-200%.

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

לגבי admin menu כתב לך יובל, גרסאת הפיתוח מעוברתת כראוי.

תודה על הסימפטיה - אכן טנדו מתפקד הרבה יותר טוב עם פונטים גדולים! בדקתי עכשיו גם אקספלורר וגם פיירפוקס וזה אחיד וגדול וקריא.. הגדלתי ב-180% דרך אגב..

וכן, סידרתי גם את הadmin menu

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

בתור המתכנת של tendu - היית שמח לשמוע את חוות דעתך - איפה לדעתך בsource כדאי שיתבצע היישור האוטומטי? עד עכשיו הוספתי את זה לקוד של הmarkdown - אבל אולי עדיף לא ברמת הפילטר כי אני הרי רוצה שיהיה יישור כבר ברמת הממשק. האם יש מקום\מות ב-theme שכל הטקסטים עוברים דרכו ששם כדאי שאוסיף את הקוד של היישור? או להשאיר ברמת הפילטר..

שאלה טובה.
האם אתה מיישר ברמת node? ברמת פסקה? ברמה של כל טאג בתוך node ?

כדי לפשט הייתי מוסיף בדיקה של האות הראשונה בתוכן בזמן הגשה של page, story וכו' האם היא בטווח היוניקוד של עברית וערבית (ככה זה עובד בפידג'ין למשל) וגם מוסיף רשימה של radio buttons עם Auto direction, force RTL, force LTR רק למקרה של בעיות.

בסיום הבדיקה הייתי מקיף את התוכן עם
<div style="direction:rtl | ltr">

ואולי גם מוסיף text-align:left | right

המקום הנכון לעשות את זה הוא ברמת הפילטר. אם אתה כותב את זה בתור פילטר נפרד, אפשר לשחרר את זה כמודול וכולם יוכלו להנות.
יש הרבה אפשרויות לקבלת ההחלטה על כיווניות (אני אוהב את הצורה ש KDE עובד - ע"פ האות הראשונה) - אבל צריך לתת למשתמש אפשרות לבטל אותה - משהו בסגנון markdown (למשל, > או < בתחילת שורה).
האפשרות להוסיף קוד ל markdown אכן יותר פשוטה בתחילה, אבל כל עוד זה לא יתקבל ע"י הכותב של markdown זה יישאר ברמת הפץ'. מודול הוא שלך.
צריך גם לחשוב על איך הוא יעבוד עם עורכים ויזואלים ימ"ש.

התחלתי...

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

<?php
// $Id$



function pdir_filter($op, $delta = 0, $format = -1, $text = '') {
  switch (
$op) {
    case
'no cache':
      return
TRUE;
    case
'list':
      return array(
0 => t('Paragraph Directionality Filter'));
    case
'description':
      return
pdir_help('admin/modules#description', array());
    case
'process':
      return
pdir_pdir($text);
    case
'prepare':
      return
$text;
  }
}

function
pdir_pdir($text) {
 
# find first text within a paragraph (ignore html inside paragraphs)
 
$chunks = preg_split('@(</?[^>]*>)@i', $text, -1, PREG_SPLIT_DELIM_CAPTURE);
 
# Find paragraphs, and check the next chunk
 
$i = 0;
  while (
$i <= count($chunks)) {
    if (
$chunks[$i] == '<p>') {
     
$text_chunk = pdir_text_chuck($chunks, $i++);
      if (
$text_chunk) {
       
$dir = pdir_determine_dir($chunks[$text_chunk]);
       
       
$chunks[$i] .= '<p style="direction:' . $dir . '">';
       
$output .= $chunks[$i];
      }
    }
    else
$output .= $chunks[$i];
   
$i++;
  }
  return
$output;
}

function
pdir_text_chuck($chunks, $i) {
  if (
substr(trim($chunks[$i]), 0, 1) == '<') {
   
//$next = pdir_text_chuck($chunks, $i++);
    //return $next;
   
return $i;
  }
  else return
$i;
}

function
pdir_determine_dir($chunk) {
 
# Check wehther the first alphabethic character is an RTL one (e.g., belongs to an RTL language)
 
if (preg_match('@([\x{0590}-\x{05f4}])@u', substr($chunk,0,1))) {
    return
'rtl';
  }
  else return
'ltr';
}

?>

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

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

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

function guess_dir($data) {
    $data = preg_replace('/<.*?>/x', '', $data); // remove html content
    $data = preg_replace('/[0-9]+/', '', $data); // remove numbers content
    $c_eng = guess_dir_count_it($data, '/\w+/u');
    $c_heb = guess_dir_count_it($data, '/[\x{05B0}-\x{05F4}\x{FB1D}-\x{FBF4}]+/u');
    $c_arb = guess_dir_count_it($data, '/[\x{060C}-\x{06FE}\x{FB50}-\x{FEFC}]+/u');
    return ($c_eng >= ($c_heb + $c_arb)) ? 'ltr' : 'rtl';
}
function guess_dir_count_it($data = '', $match) {
    $i = 0;
    while (preg_match($match, $data, $x, PREG_OFFSET_CAPTURE))
    {
      $i += strlen($x[0][0]);
      $data = substr($data,$x[0][1] + strlen($x[0][0]));
    }
    return $i;
}

הפילטר לא רץ בעת השמירה, אלא בעת הרינדור.
מדוע מספר התווים מעיד על כיווניות?

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

הרינדור קורא בעת השמירה לא? כי לפי מה שאני רואה הוא בפירוש לא קורה בכל צפייה - רק לאחר שאני משנה משהו ושומר אני רואה את השינוי.

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

אתה לא רואה שינוי, משום שהטקסט המפולטר נכנס לזכרון המטמון. תראה שבקוד שלי הכנסתי no cache, בדיוק בגלל הסיבה הזו.
לא הבנתי את הנקודה האחרונה שלך: "נראה שכבר יש שם התניה ששולפת את האנגלית אם אין עדיין תרגום לעברית". תוכל לפרט?

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

אני אסביר - הממשק של דרופל מתורגם חלקית - בעיקר בחלקים של הניהול אבל לא רק - למשל כאן, יש אזור "מבנה קלט" ואם פורשים אותו - אז הרוב שם יהיה קריא יותר עם LTR.
מה שאני אומר זה - שאני מניח שיש כאן פונקציה שמחפשת את התרגום בעברית בDB ואם היא לא מוצאת, אז זה שולף את האנגלית במקום.
ואני מקווה שזו פונקציה אחת בלבד.. ושם אפשר יהיה להוסיף כיווניות LTR אם אין עברית.
אז השאלה היא איפה הפונקציה הזו ומה הסיבה שאין שם יישור עד עכשיו..

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

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

לגבי הקוד של שניכם -
לא יהיה יותר פשוט לקרוא את הHTML המפולטר אחרי הכנסת תוכן לתוך אובייקט DOM ופשוט לעבור על text nodes במקום להעביר את הטקסט עוד ועוד פונקציות regex ופילטורי טאגים כד'?
ככה גם יהיה אפשר לעשות את עניין הכיווניות יותר סלקטיבי - לעבור על רשימה של טאגים בתוך טקסט שלם, להוסיף direction:rtl רק לאלה שבעברית ו text-align:right רק לdiv, p, pre למשל, זה יכול להיות מאד מאד שימושי במדריכים בעברית למשל שיש בהם המון טקסט מעורב.

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

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

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

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

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

טוב - יש מודול. אני אשמח לביקורות ונסיונות: http://drupal.org/project/pdir

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

עובד פצצה :)

שינויים שהייתי מוסיף -
דילוג על ספרות וסימני פיסוק
אפשרות לבחור רשימת טאגים שהמודול ישפיע עליהם - משהו כמו איזור טקסט שיקבל טאגים מופרדים ברווחים - p span li pre למשל יחפש כל אחד מאלה בטקסט.

תוסיף בעמוד המודול שצריך לאפשר אותו ב- Site configuration -> Input formats