התמודדות עם התקנת קובץ MSI על Windows Server שמחזירה הודעת שגיאה

בהתקנה רגילה על Windows Server של קובץ MSI תקין לגמרי, קיבלתי את ההודעה הבאה :

The System Administrator Has Set Policies to Prevent This Installation

חיפוש בהגדרות ה-Policy, לא עזר, לא הייתה שום מגבלה והרצתי את זה בתור Admin.

בסופו של דבר הפתרון הוא כזה :

להפעיל CMD בתור Admin

לנווט אל התיקיה הרלוונטית

להפעיל את הקובץ כך msiexec /i install.msi

זה עובד…

מקור: http://serverfault.com/questions/580972/why-is-this-preventing-me-installing-an-msi-the-system-administrator-has-set-po 

איך לכבות את Explorer enhanced security על Windows Server

שלום,

 

כשמקבלים VPS של Windows Server

אחד הדברים המעצבנים הוא ה- enhanced security שמופעל על אקספלורר.

כדי לכבות אותו יש לעשות כך :

מפעילים את Server Manager

לוחצים בצד שמאל על Local Server

במסך שמופיע מחפשים את הביטוי Explorer enhanced security

ולוחצים על ה-On ומגדירים את זה כ-Off (לכולם )

 

יש פה מדריך בתמונות למתקשים.

התקנת MongoDB על Windows + דרייבר ל-Php

שלום,

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

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

אני מתעד פה, את התהליך בקצרה , תוך ציון מקורות רלוונטים :

נתחיל בהתקנת מנוע ה-MongoDB בעצמו.

  1. מורידים את הגירסה הרלוונטית מהאתר של MongoDB
  2. נכנסים לתיקיה שבה זה הותקן
    C:\Program Files\MongoDB\Server\3.2\bin
    שימו לב שאם התקנתם גירסת 32 ביט, אז התיקיה תתחיל ב-Program Files(x86
  3. במידה ואתם עובדים עם Win 7 או win server 2008 R2 אז צריך להתקין hotfix
    למי שעדין לא התקין hotfix אף פעם – זה תיקון של מיקרוסופט שצריך לבקש אותו בקישור הזה , נכנסים לקישור, מכניסים כתובת מייל, ומקבלים אימייל עם קישור להורדת ה-Hotfix
    ואז מחלצים אותו, ומפעילים את הקובץ שחולץ, ובסוף התהליך restart
  4. בתיקיה שבה הותקן MongoDB ( סעיף 2 )
    נפתח CMD ונכתוב פקודה שתיצור תיקיית ברירת מחדל עבור הדאטאבייסים
    md \data\db
  5. סוף סוף – נפעיל בתוך ה-CMD את ה-Listener של MongoDB באמצעות הפקודה mongod.exe
    ולא נסגור את החלון של ה-CMD
    למי שרוצה להתקין את Mongo כ-Service שרץ ברקע , אז יש הוראות בתחתית הדף הזה 
  6. כדי להריץ את ה-Console של MongoDB , צריך לפתוח CMD חדשנפרד , ולהיכנס לתיקיה של מונגו, ושם להפעיל את mongo.exe

עכשיו לחלק של התקנה על PHP שיושב על Windows

אני עובד עם EasyPHP שמריץ גירסה 5.6 / 7 עם כל ה-LAMP מלא וכו'.

  1. דבר ראשון נבדוק האם גירסת ה-PHP שלנו היא Theard Safe או Non Theard Safe
    לצורך כך צריך ליצור קובץ עם הפקודה phpinfo() ולהריץ בדפדפן ( או דרך ה-CMD )
    עכשיו נחפש בתוכן את הביטוי Theard  – אם השורה הזו מסומנת כ-enabled , זאת אומרת שאנחנו עובדים על גירסה TS ( Theard Safe, אחרת – NTS
  2. עכשיו צריך לאתר את תיקית ברירת המחדל שבה מאוחסנים קבצי ההרחבות של php. ההרחבות הן קבצי dll ובדרך כלל, הן "לייד" התיקיה שבה יושב php.exe , תחפשו קצת ( השלב הזה אינו חובה, כי ניתן אומנם לשים את קובץ ההרחבה בתיקיה שונה, אבל זה עדיף מבחינת הסדר הטוב שכל ההרחבות יהיו מרוכזות באותו מקום ) .
    תשמרו את התיקיה פתוחה בשביל השלב הבא.
  3. עכשיו נוריד את ההרחבה ( driver ) של MongoDB עבור PHP מהאתר של PECL בקישור הזה https://pecl.php.net/package/mongodb
    תלחצו על הגירסה האחרונה, ותורידו את הקובץ DLL עבור גירסת ה-PHP שאצלכם ( לפי מה שבדקתם בסעיף 1 )
  4. תאחסנו את הקובץ בתיקית ההרחבות של php
  5. תוסיפו הפניה להרחבה בקובץ php.ini
    אצלי זה נראה כך  extension=php_mongodb.dll
  6. תעשו Restart לשרת ה-Apache
    ותבדקו שהכל תקין באמצעות phpinfo או php -v
    אם הכל תקין, אתם אמורים לראות ב-phpinfo שורות חדשות שעוסקות ב-MongoDB
  7. אפשר לעבוד סוף סוף – רק לזכור לא לכבות את ה-CMD שמפעיל את ה-MongoDB Server כל עוד לא סיימתם ( לחלופין – אפשר פשוט להגדיר את מונגו כסרוויס ברקע)

בהצלחה

שאילתא שמוצאת רשומות שבהן המפתח הזר לא קיים בטבלת המקור

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

הצורה הכי פשוטה ( בעיני ) היא כך

SELECT * FROM doc_recive where dr_id not in (SELECT dr_id from doctors where doctors.dr_id=doc_recive.dr_id)

יש כל מיני טכניקות לעשות את השאילתות האלו יותר יעילות

אפשר להשתמש ב-Not Exists , או ב Is null

ולמי שרוצה להתעמק – יש בקישור הזה השוואה

 

להוציא את המשתמש אוטומטית לאחר זמן מה ללא פעילות ( jquery plugin inactivity )

באפליקציות אינטרנט שמצריכות כניסה – יש עניין שבצד השרת – מנוהל לרוב Session

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

כדי לתת מענה לכך – אז בפריימוורקים של צד שרת , בדרך כלל אפשר לזהות אם פג תוקף ה- Session ואז לעשות redirect למשתמש.

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

יש הרבה פתרונות JS

אני מצאתי שהתוסף הבא ל- Jquery הכי נוח.

קישור לתוסף ב- Githut

קוד להמחשה ( במצב פרודקשיין, אולי כדאי לעשות קריאת אגקס לשרת, לבדוק אם ה Session בתוקף, אבל הקוד יעבוד היטב גם בלי זה )

הערה : השורה הראשונה מושכת את הסקריפט, אני עובד עם Laravel בצד שרת, ולכן הפקודה asset – וסימני הסוגרים המסולסלים ( כנ"ל בשורה האחרונה ) .

<!-- jquery inactivity -->
<script src="{{ asset('js/jquery-inactivity/jquery.inactivity.min.js') }}">



</script>
<script>
    // https://github.com/afklondon/jquery.inactivity
    $(document).inactivity( {
        interval: 1800000, // the timeout until the inactivity event fire [default: 3000]
        mouse: true, // listen for mouse inactivity [default: true]
        keyboard: true, // listen for keyboard inactivity [default: true]
        touch: true, // listen for touch inactivity [default: true]
        customEvents: "", // listen for custom events [default: ""]
        triggerAll: false , // if set to false only the first "activity" event will be fired [default: false]
    });
    $(document).on("inactivity", function(){
        // function that fires on inactivity
        console.log('loged out beacuse of inactivity');
        window.location = "{{ route('logout') }}";
    });


</script>

 

איך לעשות כפתור "שמור וסגור" בטופס scriptcase ?

הבעיה

בטופס של scriptcase אין אפשרות מובנה לשמור וסגור ביחד

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

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

הפתרון

באירוע של AfterUpdate

להכניס 2 פקודות

אחת ששומרת את הנתונים

והשניה שיוצאת אל הטופס הרצוי

דוגמא :

sc_commit_trans();
sc_redir(grid_leads.php);

 

בהצלחה

 

איך ב-ScriptCase לשים ערך ברירת מחדל מתוך Session אל שדה בשורה חדשה ב-Editable grid view ?

הבעיה

כאשר משתמשים ב Editable grid view של scriptcase , אז בהוספת שורה – נניח ונרצה ערך ברירת מחדל מתוך session או מתוך global variable

הבעיה היא שגם האירועים OnLoad וגם OnRecordLoad  נטענים לגבי כל השורות

הפתרון

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

למשל – האם המפתח הראשי קיים או שהוא empty ?

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

בהצלחה.

נגישות אתרים

נגישות אתרים – שימוש ב aria-label

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

מבחינת נגישות – אנחנו אמורים לתת תויות עם כיתוב , אלא שלא תמיד זה מתאים למה שרוצים לעשות. במקרה כזה באה לעזרתנו ה ARIA API ובאופן ספציפי ה aria-label .

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

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

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

מטרת הדף הזה היא לרכז  טכניקות נגישות בפיתוח Web כאשר אני אתעד ישירות מהתקן ( כלומר ישירות מדף הטכניקות של W3C) , ואשתדל לתת דוגמאות . השתדלתי לכתוב בשפה הכי פשוטה שיש, בלי מונחיים משפטיים. קיבצתי נושאים קשורים יחד. ובמקומות שבהם היה נראה לי חשוב – קישרתי למקורות.

*** הפוסט בכתיבה ועדין לא גמור ( נכון ל-17.8.2016 לסה"נ ) ***

 

טכניקות נגישות

טכניקות נגישות כלליות

 

  • הקישור הראשון בדף צריך להיות "דלג לתוכן"
    והוא צריך להוביל ישירות לעוגן (#) של התוכן
    זה לא חייב להיות גלוי , מותר לשים class שמסתיר את זה ,
  • דוגמא :
<a href="#content">דלג לתוכן</a>
  • אל תגביל את המשתמש בזמן – שיוכל לסיים מה שהוא רוצה לעשות.  לדוגמא – באתר מכרזים, שמנגנון הניצחון יקבע לפי ההצעה הטובה ביותר ולא לפי זמן.
    דוגמא נוספת – משחקי מחשב – לאפשר הוספת זמן
  • תן אפשרות להפסיק רענון אוטומטי – אם אתה מרענן אוטומטית את הדף \ חלק בדף, אתה צריך לספק לגולש אפשרות לעצור את הרענון.
    החריג היחיד – הוא במקרים של "חירום" – כמו למשל ההתראות שפיקוד העורף סיפק עבור נפילות של טילים בצוק איתן – במקרה כזה, לא צריך לאפשר לגולש להפסיק את הרענון.
  • תן אפשרות לרענן חלק בדף ( למשל קישור שמבצע רענון של מצב המניות \ חדשות וכדומה )
  • צריך לספק תחליף לכל דבר שהוא לא טקסט
    אני מסביר זאת בפירוט בהמשך, אך בכל מקרה העיקרון הוא שאתה צריך לקחת בחשבון שיש אנשים שלא מסוגלים לראות : תמונות, וידאו, אנימציות, קאפצאה , ולכן תספק לכל אלו תחליף בטקסט
    כאשר – בקטע הזה, המינימום שאתה צריך – זה לתת תיאור קצר שמסביר למשתמש שיש פה תמונה שמציגה משהו.
    אבל עדיף – לתת תיאור מלא, למשל – עבור וידאו, לתת תמליל מלא של הוידאו בתוך תגית הוידאו.
  • להודיע למשתמש מה הולך לקרות כתוצאה מפעולה שהוא יעשה בטופס \ בממשק לפני שזה מתרחש
    דוגמא  –
    יש לנו שאלות שבו כל פעם שעונים נכונה על שאלה מסויימת – אוטומטית המשתמש מועבר לשאלה הבאה .
    אז צריך להסביר לפני השאלה הראשונה שזה מה שהולך לקרות.דוגמא 2 – יש לנו מקום שבו בוחרים את שפת האתר באמצעות כפתורי רדיו  – אז בהסבר שיופיע לפני כפתורי הרדיו נכתוב בצורה ברורה שהשפה הולכת להשתנות.
  • אם משלבים באתר גם Components כמו JSP  או ActiveX , אז צריך לדאוג שהם יעבדו מול ה-Accessibility API ( כלומר מאפייני ARIA, roles ועוד )
    כדי שתוכנות שמסייעות לאנשים מוגבלים יוכלו להתחבר למידע.
  • חובה לוודא שאלמנטים בדף נקראים היטב על ידי עזרים של נגישות
    בעיקרון – התקן מציין שמי שכותב HTML תקין לפי התקן אז הוא יעמוד בזה בקלות
    יש כמה דברים בסעיף זה – שצריך להזכיר אותם:

    • נניח ויש תמונה שמשמשת ככפתור לחיץ – זה בעייתי, כי קורא מסך לא יבין במה מדובר
      לעומת זאת – אם נהפוך את התמונה לכפתור שיכלול Value ואת שם הכפתור – אז קורא מסך כן יוכל לקרוא את זה ולתת לגולש העיוור תיאור שמסביר שזה כפתור שנקרא….(הערך שכתבת במאפיין value) – קישור לדוגמא לכפתור שמוגדר נכון
  • כל מידע שמוצג בצבע – צריך להציג אותו גם עם הסבר במילים
    דוגמא -יש טופס עם שדות חובה  והם מסומנים באדום
    בנוסף  לייד כל שדה חובה מסומנת כוכבית אז המשפט בתחילת הטופס צריך לומר "השדות הדרושים מופיעים בצבע אדום וגם מסומנים ב- * כוכבית"נקודה לשים לב – הסימן כוכבית הוא דורש תשומת לב לגודל – כי לא כל קוראי המסך מתייחסים אליו ולא כל המשתמשים כבדי ראיה – שמים לב לכוכבית, בגלל הגודל שלה.
  • ניגודיות – ישנה נוסחה שקובעת מה "יחס הניגודיות" בין צבע הרקע לצבע הכתב. המטרה היא לקהל על כבדי ראיה.
    • בגדול – צריך לשמור על יחס 4.5:1
    • עבור טקסט גדול -אפשר גם יחס 3:1
    • אם קהל היעד הוא כבדי ראיה, או שרמת הנגישות הנדרשת היא AAA – אז נחוץ יחס של 7:1

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

  • מקלדת:לוודא שאפשר להגיע לכל מקום בדף עם המקלדת ( בעיקר Tab ) .
    לוודא שאין "מלכודות מקלדת" בדף – כלומר שאין מקום מסוים שאם נכנסים אליו – אז אי אפשר לצאת ממנו באמצעות המקלדת בלבד.
    לא לדרוש קצב הקלדה מסוים
  • אפשר להבין מה המשמעות של כל קישור מתוך הטקסט של הקישור עצמו
    לדוגמא :
    במשפט הבא – אפשר להבין מתוך ההקשר שהקישור מוביל אל הכתבה …
    המאמר בעיתון הזה מאפיין את הכותב.
  • השתמש בכותרות של HTML כדי לתת כותרת ( ולא רק הדגשה של כתב באמצעות CSS  )
  • תן פתרון טכני שמאפשר לראות כל פעם איפה הפוקוס של המקלדת
    כלומר שעוברים בין אלמנטים בדף באמצעות טאב – אז אפשר לראות ויזואלית על המסך איפה אנחנו נמצאים. (קישור עם דוגמא ל- CSS ודוגמא ל- JS כדי להציג ויזואלית היכן הפוקוס )
  • לסדר את התוכן ב-DOM כך שיהיה תואם לסדר שלו על המסך – זה תקף בעיקר ב-2 עניינים:
    • לוודא שאם עשיתם עיצוב CSS הוא תואם לסדר שמופיע ב-Html, כדי שמי שמשתמש ב"קורא מסך" יוכל להבין את הסדר  – למשל נניח ויש רשימת של פריטים בקטלוג , ובאמצע יש תמונה, ואחריה תיאור של התמונה. ובאמצעות Css דאגנו שהתיאור של התמונה יבוא מתחתיה – אז צריך לוודא שגם ב-Html התיאור של התמונה הוא אחרי התמונה המתאימה ( ולא לפניה, למרות שמבחינה טכנית זה אפשרי כמובן ) .
    • בערבוב של שפות , למשל אנגלית בתוך משפט בעברית, צריך להשתמש בתגיות שמאפשרות ל"קורא מסך" להבין שהשפה התחלפה
      דוגמא :

      <p>The title says "<span lang="he" 
      dir="rtl">פעילות הבינאום, W3C</span>" in Hebrew.</p>

טכניקות נגישות שנוגעות לניווט

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

    • תפריט ניווט וגם מפת אתר
    • תפריט ניווט וגם עמוד תוכן עניינים
    • תפריט ניווט וגם קישור למאמרים קשורים
    • תפריט ניווט וגם תיבת חיפוש

טכניקות נגישות שנוגעות ל-Meta ול-Header

  • בתגית Html הפותחת, צריך להכניס מאפיין שפה ( סעיף 3.1.1 )
  • <html lang="fr">
  • צריך לשים תגית title שמתארת באמת מה מציג הדף

טכניקות נגישות – מידע שמתעדכן אוטומטית

  • תאפשר לגולש לשלוט בעדכון – כלומר – לעצור אותו, לבצע עדכון, וכדומה.

טכניקות נגישות – תמונות

  • תשתמש ב-alt  על כל תמונה
  • אם התמונה היא חסרת משמעות – למשל חלק מהרקע של האתר – אז תשים עבורה alt="" רייק.

טכניקות נגישות – אנימציות / הבהובים / דברים זזים

  • אפשר למשתמש להפסיק כל דבר שזז ( אנימציה \ וידאו \ פלאש \ סרגל חדשות , משהו זז)
    צריך ליידע את המשתמש באיזה מקש להשתמש כדי לעצור.
    אם לדוגמא אנחנו מציגים קישור למצגת בתוך Modal, אז אפשר לתת תיאור בתחתית ה-Modal שאומר "לחץ על מקש הרווח כדי לעצור" .
    יש חריגים כאן – בסעיף 2.2.2
    דוגמא לסרגל חדשות שיש בו כפתור עצירה
  • אל תגביל את המשתמש בזמן – שיוכל לסיים מה שהוא רוצה לעשות.  לדוגמא – באתר מכרזים, שמנגנון הניצחון יקבע לפי ההצעה הטובה ביותר ולא לפי זמן.
    דוגמא נוספת – משחקי מחשב – לאפשר הוספת זמן
  • הבהוב :
    להגביל הבהוב עד 3 פעמים בשניה.
    רכיב מהבהב בכל מקרה לא יותר מ-5 שניות
    לתת שליטה על עצירת ההבהוב
    סעיף מיוחד עבור הבהוב אדום – במידה ויש לכם משהו כזה – צריך לוודא שעומדים בסעיף כאן

טכניקות נגישות – סרטונים / אודיו

  • סרטונים – לשים כתוביות
    הדרכה על הוספת כתוביות לסרטונים ב-YouTube
  • צריך לספק משהו במקום הוידאו, עבור אנשים שלא יכולים לראות את הוידאו ( עוורים ) – הפתרון המקובל הוא לשים את התמליל של הוידאו בתוך תגית הוידאו.
    אפשר לראות דוגמא לתמליל של הוידאו בתוך תגית וידאו – כאן.
  • בסרטונים –אם יש קטע בסרט, שמובן מהצפיה, אבל לא מובן למי שרק קורא את הכתוביות –אז צריך להוסיף אודיו או כתוביות שמסבירות את מה שמתרחש.נניח ובסרטון יש אבא ובת שמנהלים שיחה ותוך כדי השיחה מתחילה שריפה מאחורי גבם – אז אדם עיוור שרק קורא את הכתוביות לא יראה את השריפה ולא יבין מדוע בסצינה הבאה הם בורחים.כדי לפתור את זה – צריך לשים כתוביות או קטע שמע שמסביר שמתחילה שריפה.
  • תיאור שמע או חלופה למדיה = התיאור הלא ברור הזה בעצם אומר כך :
    אם יש וידאו שרואים בעיניים בוידאו אבל זה לא מובן למי שרק מקשיב לאודיו של הוידאו , למשל עיוור.
    אז צריך לספק אפשרות טכנית לעוד "רצועת אודיו" שמסבירה מה הולך על המסך.
    אבל יש אפשרות נוספת  – חלופה למדיה : שזה בעצם טקסט שמתאר בדיוק את התוכן של הוידאו
    דוגמא – אם יש סרטון הדרכה באתר, שבו יש מדריך שמסביר ומראה ביחד, אז אפשר לספק אחרי / לפני הוידאו – הסבר כתוב במילים, שמסביר את אותו דבר שהוסבר בוידאו.
  • להפסיק אוטומטית קטע אודיו שמתנגן לבד אחרי 3 שניות או פחות.
    בכל מקרה של יותר מ-3 שניות אודיו, חייבים לאפשר לשלוט באודיו – כלומר להנמיך, לעצור וכדומה.

טכניקות נגישות – גרפים

  • צריך לתת תיאור של משמעות הגרף, למשל אם הגרף מראה שבחודש תשרי המכירות היו גדולות יותר מאשר בחשוון – אז התיאור של הגרף יהיה "המכירות בתשרי עלו על המכירות בחשוון".

טכניקות נגישות  – טפסים

  • תשתמש ב-Lables כדי להסביר למשתמש מה למלא בכל שדה
  • וולידציות – אם הגולש טועה – צריך להסביר לו באיזה שדה ספציפית הוא טעה, ומה הטעות
    צריך גם לספק דוגמא לתיקון ( אלא אם כן זה יוצר בעיית אבטחה ).
  • עבור דברים פיננסים או משפטיים – צריך לעמוד בלפחות אחד מתנאים :
    • הפעולה צריכה להיות הפיכה – כלומר אם הוא ירצה הוא יוכל לבטל זאת
      או
    • שהנתונים שהוא הקליד יבדקו – ואם ימצאו שגיאות – הוא יוכל לתקן
      או
    • שלפני שהוא מבצע את השמירה\שליחה – יהיה עמוד שבו הוא יוכל לסקור את כל מה שהוא מילא, ולאשר סופית
  • אם אתה דורש בשדה מסוים שיקלידו רק בפורמט מסויים –
    אז תספק דוגמא או הסבר לפורמט הרצוי.
  • אם  סדר השדות במעבר באמצעות tab שונה מאשר הסדר שבו צריך למלא אותם
    אז להשתמש ב tabindex עבור השדות \ הפקדים – כך שהסדר בו צריך למלא את השדות – יהיה הסדר הנכון ב tabindex
  • טריק – בכל אלמנט בתוך הטופס שאינו שדה – בדרך כלל הטאב לא עוצר בו, אבל – אם נשים בו tabindex="0"   אז זה יגרום לכך שבמעבר טאב – המשתמש יעצור על זה
    זה אידיאלי עבור הוראות, כמו למשל תגיות p בתוך הטופס שבהם אומרים למשתמש דברים כמו "מינימום 6 תווים" וכדומה ( קישור לדוגמא עם טאב אינדקס אפס ).
  • לא לשנות תוכן של אלמנט שמקבל פוקוס
  • לא לעשות משהו בלתי צפוי כתוצאה ממילוי דברים בטופס אלא אם כן הודעת למשתמש על זה
    • דוגמא טרוייאלית ביותר – יש טופס על המסך, וכדי לשמור אותו – צריך לשים כפתור Submit עם המילה "שמור" – זה כבר עונה על הסעיף הזה בתקן
    • למשל – יש לך שדה שאם ממלאים בו ערך מסוים – אז אתה אוטומטית פותח טופס מודאלי למילוי עוד כמה פרטים – במקרה זה צריך לכתוב משפט שאומר למשתמש שזה מה שהולך לקרות.
    • אל תגרום להעברה לדף אחר כתוצאה מבחירת ערך בדרופ דאון.

 

 

גכ

עוד פעולות נגישות שצריך לבצע אם מנגישים לרמה  AAA :

  • וידאו :
    מתורגמן לשפת הסימנים בשידור חי
  • אודיו :
    אם יש קולות רקע במקביל לדיבור, למשל מוזיקת רקע תוך כדי שהקריין מסביר – אז צריך לתת אפשרות להשתיק את קולות הרקע,
    ובכל מקרה צריך להקפיד שקולות הרקע יהיו לפחות 20 דציבלים פחות מהדיבור. ( סעיף 1.4.7 )
  • עבור כל ביטוי מיוחד \ מקצועי וכדומה – יש לתת קישור להסבר או להשתמש בתגיות של "הגדרות" dl/dt וכדומה
  • להוסיף "פירורי לחם" בעמודי האתר – כלומר מקום כלשהוא בעמוד שאומר למשתמש איפה הוא נמצא בתוך האתר,
  • לתת קישור לעזרה בכל דף – והעזרה צריכה להיות רלוונטית עבור הדף .
  • לתת אפשרות להקראה אוטומטית של תוכן האתר
  • מתרגם לשפת הסימנים עבור וידאו
  • לתת מנגנון טכני שיפרש ראשי תיבות או קיצורים
  • הכלל שחל על דברים פיננסים או משפטיים ברמה AA – אז ברמה AAA הוא חל על הכל, כלומר בכל טופס, צריך לספק אחד מ-3 אפשרויות – אפשרות לבטל , אפשרות לתקן לאחר שנמצאו שגיאות, ודף סקירה שמציג את התוכן לאישור סופי לפני שמירה.
  • גם אם משתמש יצא מה-Session בטעות, צריך לתת לו אפשרות לחזור ולהמשיך מחדש מאותה נקודה – בלי למלא שוב פעם את הנתונים

שימוש ב-WebApi של SendGrid עבור משלוח מיילים ( לא באמצעות SMTP )

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

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

לצורך כך השתמשתי ב-WebAPI של SendGrid.

מה היתרון של WebAPI על פני שימוש רגיל ב-SMTP ?

כל ספקי האחסון השיתופיים חוסמים מיילים ב-SMTP בצורה זו או אחרת (מגבלה יומית, שעתית, שבועית וכדומה). כאשר שליחת המיילים מנוטרת דרך port 25/26/465 עבור משלוח מיילים ב-Smtp.

אז כדי לעקוף את המגבלה, ל-SendGrid יש WebApi מאוד נוח ומאוד קל לתפעול.

יחד עם זאת התיעוד סביר – אך היה יכול להיות יותר טוב.

אני השתמשתי בגירסה עבור php ( קישור ל-git פה )

התקנת הספריה ב-php באמצעות composer

(אני מניח שאתם משתמשים ב-composer, אם לא, אפשר גם להוריד את הספריה בגיט ולעשות לה require בעצמכם )

בחלק של ה-require בתוך composer.json תוסיפו הפניה לספריה שלהם:

{
  "require": {
    "sendgrid/sendgrid": "~5.0.7"
  }
}

ולאחר מכן להריץ composer update דרך שורת הפקודה (console).

להשיג Api Key בחשבון שלכם ב-SendGrid

כעת – גשו לחשבון שלכם ב-SendGrid והפיקו לעצמכם API KEY , עם ההרשאות שדרושות ( ניתן לשינוי בהמשך , אך הקוד עצמו מופיע רק פעם אחת על המסך ).

והחלק האחרון – המשלוח עצמו.

דוגמא למשלוח מייל באמצעות WebAPI של SendGrid ב-php

הנה דוגמא פשוטה :

הערות : הקוד פה חלקי בלבד .

הקוד מתבסס על use שלא הדבקתי פה.

ואני כותב ב-Laravel ולכן הפונקציה View עם מתודת render().

try {
    $from = new SendGrid\Email(self::SENDER_NAME, self::MANAGER_EMAIL);
    $subject = $e->subject;
    $to = new SendGrid\Email(null, $e->To);
    $body = view('emails.emailWithButton', [
        'body' => $e->body,
        'button' => $e->btn,
        'link' => $e->link,
        'title' => $e->subject])->render();
    $content = new SendGrid\Content("text/html", $body);
    $mail = new SendGrid\Mail($from, $subject, $to, $content);

    $sg = new \SendGrid($apiKey);

    $response = $sg->client->mail()->send()->post($mail);
    echo $response->statusCode();
    echo $response->headers();
    echo $response->body();


ובצורה הזו – שולחים מייל באמצעות API.

התשובה המוחזרת – היא מאוד נוחה ומכילה מידע , שעבורי אומנם לא היה שימושי, אבל אולי לאנשים אחרים הוא יהיה לעזר.

בהצלחה.