@davidnead אמר בתבניות של API:
זה מה שהתכוונתי לשאול. כלומר זו גרסת PHP. לא מענין.
אבל יש להם כמובן גרסת צד לקוח מבוסס vue + bootstrap נקי עם התממשקות לAPI לכל הפעולות, כאשר צד שרת אתה בונה במה שתרצה (אצלי זה nodejs)
@davidnead אמר בתבניות של API:
זה מה שהתכוונתי לשאול. כלומר זו גרסת PHP. לא מענין.
אבל יש להם כמובן גרסת צד לקוח מבוסס vue + bootstrap נקי עם התממשקות לAPI לכל הפעולות, כאשר צד שרת אתה בונה במה שתרצה (אצלי זה nodejs)
@chagold אמר בfetch שא"א לקבל ממנו את הנתונים:
הבקשה חוזרת עם סטטוס 200, אבל אני לא מצליח לגשת לנתונים.
בקוד דלהלן יש שגיאה שא"א לקבל את הנתונים בJSON. מצ"ב תמונה (השגיאה האדומה שם למעלה בצד ימין).fetch('http://admin.co.il:200/index.php?p=login&user='+user.username_or_email+'&password='+user.password) .then(user => { context.commit('loginUserSuccess', user); console.log(user); }) .then(response => response.json()) .then(resText => console.log(resText) ) .catch(error => { context.commit('loginUserFailure', error); });
אתה לא מחזיר כלום מהשלב הראשון הלאה
תנסה כך
fetch('http://admin.co.il:200/index.php?p=login&user='+user.username_or_email+'&password='+user.password)
.then(user => {
context.commit('loginUserSuccess', user);
console.log(user);
return user;
})
.then(response => response.json())
.then(resText => console.log(resText) )
.catch(error => {
context.commit('loginUserFailure', error);
});
@יוס אמר בבירור | עבודה בתחום התכנות:
אם משהו רוצה אותך הוא נאלץ ולעיתים מסכים להתפשר גם על כאלו דברים
אם אתה מדבר על שכיר,
מתי מצאת מתכנת מתחיל ש"מישהו רוצה אותו"?
הוא אשר דיברתי שיש מצב להגיע למצב זה, אך כשכבר נמצאים בשנות השובע.
ואם אתה מדבר על עצמאי הרי שעיקר הבעיה היא לא במעסיק אלא בעוסק/בעובד שהוא ישמור על עצמו לא לעבור את הגבלת השעות שלו
@avi-rz אמר בהתממשקות ל API של ניהול קופה והדפסת הקבלה על נייר תרמי:
@חוקר אמר בהתממשקות ל API של ניהול קופה והדפסת הקבלה על נייר תרמי:
אך אם כן השאלה היא איך ניתן להוציא חשבוניות/קבלות מאושרות לצרכי מס
לא צריך לזה תוכנה מאושרת ממס הכנסה.
לא ברור כוונתך.
אולי חסר פסיק?
לא, צריך לזה תוכנה מאושרת ממס הכנסה.
@chagold
למה שלא תפצל בשרת ע"י פרוקסי או מה?
איזה שרת זה? nginx או אפאצ'י?
בnginx ניתן בקלות לפי הurl להגדיר תיקיית שורש אחרת או פרוקסי לשרת אחר או לפורט אחר
@chagold אמר בתאריך עברי ב VEU:
@חוקר אמר בתאריך עברי ב VEU:
ספריה של המרת תאריך לועזי לעברי
אני משתמש בזה עד היום בצד שרת בnodejs
אתה אומר כאן שבעצם אני יכול להשתמש באותה ספריה גם לצד לקוח.
איך נכון להשתמש בזה?
const Hebcal = require('hebcal');
כמו בנוד, או שיש צורה ע"י import?
יש לי דשבורד בVUE יש בו תפריט עליון המורכב מקומפוננטה המכיל רכיבי תפריט עליון
אחד הרכיבים הוא תפריט נפתח שבו במשתמש יכול לבחור את הפרוייקט המבוקש לניהול.
בקומפוננטה ההיא מוגדר שברגע שהוא בחר פרוויקט זה נשמר לי ב localStorage וב store (ע"י commit).
בתצוגה עצמה אני מציג למשתמש את פרטי הפרוייקט המבוקש והאופציות הרלוונטיות.
מזהה הפרוייקט המבוקש נלקח מתוך ה store, וזה נשלח לשרת לבקש את פרטי הפרוייקט המבוקש בעת טעינת הדף.
הנתונים שם מתרעננים כל 5 שניות מול השרת, ולכן אם הוא שינה פרוייקט מבוקש לניהול, אזי בריענון הבא כבר יוצג לו הפרוייקט המבוקש כעת.
אני רוצה דרך לנטר בקומפוננטה של ניהול הפרוייקט שברגע שהוא מזהה שינוי בפרוייקט המבוקש (נכון לעכשיו הוי אומר שינוי בנתון מאוחסן ב store) תרוץ הפונקציה של שאיבת הנתונים וממילא התצוגה תתעדכן בפרטים של הפרוייקט הנבחר כעת.
אציין, בקומפוננטה של הניהול יש input של תאריך שיש בו
@change="setSelectedDate"
ובעצם אני צריך משהו בסגנון שרץ לאחר שינוי, אך לו מה input שם, אלא מאירוע לחיצה על פרוייקט מבוקש בקומפוננטה של התפריט העליון.
אציין שאני כבר עם ידע לא רע ב VUE.
אני מחפש ספריה של המרת תאריך לועזי לעברי המתאימה ל VUE
או/ובמקביל בורר תאריכים עברי, או בורר משולב עברי ולועזי.
מצאתי את זה https://www.npmjs.com/package/jewish-dates-core
אבל לא הבנתי את כוונת הכותב האם זה מתאים גם ל VUE או רק לריאקט.
תודה
להלן הסט המלא בשיטה זו:
getDescendantProp : function (obj, desc, returnByUndefined = false) {
if (!desc){return obj;}
let arr = desc.split('.');
while (arr.length && obj !== undefined) {
obj = obj[arr.shift()];
}
return obj;
},
setDescendantProp : function (obj, desc, value) {
if (!desc){return obj = value;}
let arr = desc.split('.');
while (arr.length > 1) {
let shift = arr.shift();
if (typeof obj[shift] === 'undefined'){obj[shift] = {}}
obj = obj[shift];
if (typeof obj[arr[0]] === 'undefined' && arr.length > 1){obj[arr[0]] = {}}
}
return obj[arr[0]] = value;
},
addDescendantProp : function (obj, desc, value) {
if (!desc){return obj = value;}
let arr = desc.split('.');
while (arr.length > 1) {
let shift = arr.shift();
if (typeof obj[shift] === 'undefined'){obj[shift] = {}}
obj = obj[shift];
if (typeof obj[arr[0]] === 'undefined' && arr.length > 1){obj[arr[0]] = {}}
}
if (!obj[arr[0]]){
obj[arr[0]] = 0;
}
return obj[arr[0]] += value;
},
addPlusDescendantProp : function (obj, desc) {
if (!desc){ if (!obj) {obj = 0} else {obj++} return obj}
let arr = desc.split('.');
while (arr.length > 1) {
let shift = arr.shift();
if (typeof obj[shift] === 'undefined'){obj[shift] = {}}
obj = obj[shift];
if (typeof obj[arr[0]] === 'undefined' && arr.length > 1){obj[arr[0]] = {}}
}
if (!obj[arr[0]]){
obj[arr[0]] = 0;
}
obj[arr[0]] = parseInt(obj[arr[0]]);
return obj[arr[0]]++;
},
addPropertyDescendantProp : function (obj, desc, key, value) {
if (!desc){return obj = value;}
let arr = desc.split('.');
while (arr.length > 1) {
let shift = arr.shift();
if (typeof obj[shift] === 'undefined'){obj[shift] = {}}
obj = obj[shift];
if (typeof obj[arr[0]] === 'undefined' && arr.length > 1){obj[arr[0]] = {}}
}
if (!obj[arr[0]]){
obj[arr[0]] = {};
}
obj[arr[0]][key] = value;
return obj[arr[0]];
},
delDescendantProp : function (obj, desc) {
if (!desc){return obj = value;}
let arr = desc.split('.');
while (arr.length > 1) {
obj = obj[arr.shift()];
if (typeof obj[arr[0]] === 'undefined' && arr.length > 1){obj[arr[0]] = {}}
}
return delete obj[arr[0]];
},
דוגמאות שימוש:
//הוספת סכום למשתנה שאינו בטוח קיים
__.addDescendantProp(myData.IncomingCallMinutes, ApiDID + '.' + moment().format('YYYYMMDD'), duration);
//הוספת ++ למשתנה שלא בטוח שהוא קיים
let countIp = __.addPlusDescendantProp(myData.ipBlocked, clientIp + '.' + 'count');
//הוספת איבר והצבת ערך לאיבר, על משתנה שלא בטוח שהוא קיים
__.addPropertyDescendantProp(id_data['Butza']['Mishnaiot'], seder_key +'.' + masecet_key +'.' + perek_key, i, [perek_obj['r' + i], __.getDescendantProp(myData.QuestionsAndAnswersMishnaiot, ProjectID + '.' + seder_key + '.' + masecet_key + '.' + perek_key + '.' + i + '.QValid') === parseInt(perek_obj['r' + i])])
//מחיקת איבר פנימי
__.delDescendantProp(myData.QuestionsById, ProjectID + '.' + SelectedTrivia['id'] );
@katz אמר בAPI לקבל את שם הבנק ושם הסניף:
@חוקר
כאן יש API של כל הבנקיםhttps://data.gov.il/api/3/action/datastore_search?resource_id=1c5bc716-8210-4ec7-85be-92e6271955c2&
אגב עם אציין לימיט 2000 או יותר גדול (נכון לעכשיו יש שם 1468) אז זה יהיה כולל הכל באותה קריאה וניתן לבצע סינון על פי חיפוש מספר הסניף.
אבל לכאורה כן אסתפק בטבלה פנימית ולחצן עדכון ידני או תזמון עדכון פעם ב.
תודה לכולם
@dovid אמר בשירות ענן ישראלי מומלץ:
@חוקר ראית מה הכסף הזה יכול לקנות...
כן, רק אפשר להבין שבן אדם לא מעוניין לשלם יקר על משהו שקיים בזול.
רק לפעמים יש וחושבים שזה קיים בזול, ולמען האמת זה לא דומה ליקר..
@nigun אמר בשוק התכנות החרדי:
מה רע בפרסום בנושא כללי?
כשאתה מעלה נושא ציבורי, זה רגיש, וכבר נידון פה בפורום שיש יזמים שמשכפלים רעיונות..
כמה שהקבוצה יותר קטנה וס"ה מדובר באלו שזה מיועד להם, אני מרגיש יותר בטוח להעלות בקשות שמגיעות לפתחי
שתיקה כהודעה..
אני מתחיל להתקדם
https://tchumim.com/post/117572
עד היום השתמשתי לממשקי הניהול ללקוחות עם פריימוורק php בשם YII2.
ניהול היוזרים בוצע עם המודל המובנה שם, יש שם גנרטור שיוצר מודולים תצוגות וקונטרולרים לכל הטבלאות.
רוב השימוש בממשק הינו CRUD פשוט על טבלאות, כאשר פה ושם יש צורך בכל מיני פונקציות שהייתי מוסיף לבד בקונטרולרים.
כעת יש לי פרוייקט שמורכב ממסך המתעדכן אוטומטי מהרשמות שנעשו בטלפון, ולכל שורה יש לי סט של פונקציות בהתאם לסטטוס וסוג השורה וכו', וכן ישנם מספר מערכות ללקוח אחד שיוצגו באותו תצוגה ועוד, מה שהביא אותי לתחושה שעלי לבנות משהו חדש, וצד השרת יהיה אותו תהליך nodejs המשמש אותי למערכת הטלפונית, ויש בו בין כך את כל הפונקציות והנתונים.
אני התחברתי לכיון כמו שקיים בממשק הניהול של נדרים פלוס, כל הממשק הינו html מוכן מראש עם כל סוגי התצוגות והפונקציות ב js, הכל בתוך divים המוגדרים ל hidden ובכניסה ראשונית מוצג רק הדיב של ההתחברות, לאחר התחברות שמבוצעת ב api הוא מוסתר ומוצג הדיב של התפריט הראשי, ובעת בחירת פעולה מסויימת מוסתרים שאר הדיבים ונגלה רק הדיב המציג את הטבלה/הפעולה הרצויה.
כאשר כל הפעולות בצד שרת מבוצעים על ידי api שכמובן חסומים, ונגישים רק למחוברים המזוהים על ידי עוגיות, וכן התצוגות של נתונים מקבלים מידע באמצעות api וטוענים אותם לטבלה הקיימת ב html מטעינת הדף הראשונית.
אשמח לשמוע מהחברים האם יש משהו יותר קליל ויותר פרקטי/מודרני אך בסגנון הנ"ל שצד השרת בנוי בנפרד ב nodejs.
אין לי חשק לעבוד כעת על צד שרת שמרנדר html.
האם יש ספריות/פריימוורקים מומלצים מעבר ל jquery ובוטסטראפ?
או משהו שמקל יותר על עניין העיצוב, שאגב זה יהיה לי קשה, כי אני לא הסגנון שיודע לעצב..
תודה
@yossiz אמר באימות משתמשים וממשק ניהול בנוד:
@חוקר יש הצפנה, express-session מקבלת כפרמטר secret שהוא מפתח ההצפנה:
בשורה אחרונה:
אם אני משתמש בעוגיות בלבד: חסרונות עלי ליצור טוקן מוצפן קשה לזיוף, עלי לנהל את הגדרות העוגיות, המידע (כל העדפות וכו' שאני שומר עליו) חשוף אצלי הלקוח.
אם אני משתמש ב express-session, זה מצפין עבורי מראש את העוגיה. (האם עלי ליצור טוקן, או שמספיק לי מזהה הפעלה פנימי שמשייך לי אותו למשתמש הנכון?), הגדרות הניהול הן יותר קלות, שאר המידע אינו נגיש ללקוח.
ישנו נתון נוסף? כתבתי יבש מידי כנראה..
@dovid
ראשית תודה רבה על התגובה המפורטת והארוכה.!
@dovid אמר באימות משתמשים וממשק ניהול בנוד:
express-session.
אם אני מבין נכון (כך היה נדמה לי בניסוי מלמעלה), בכל הפעלה מחדש של השרת/אפליקציה זה מתאפס.
אני צודק?
ולכן זה בעייתי בשבילי, ובעיקר בתקופת הבניה, בו אני מאתחל די הרבה את האפליקציה לאחר כל שינוי.
אגב.
מה שכן ראיתי, שהשרת שלי מסוגל לעבוד ב200 בקשות בשניה ברצף של כמה שעות טובות, ללא שום קושי (מקסימום 40/200 CPU, וכמעט ללא תוספת צריכת ראם)
הממוצע הרגיל לשניה אצלי ברוב שעות היום הינו בין 10-20
@clickone אמר בישיבה על קברו, בלי סיסמא?:
@חוקר
לגבי הפיתרון של ה4 ספרות אחרונות, כעת אני חושב, שאם המאגר כבר דלף החוצה, והוא ירצה נתונים מעודכנים, אז אולי זה לא רעיון חכם.
מצד שני אתה צריך לקוות שהוא לא הולך לשחרר את המאגר החוצה ואז אולי זה יותר קל.הסיפור של אבטחה של כזה דבר אכן מורכב, לאפשר פשטות ומצד שני ביטחון....
למזלי הוא לא הספיק למשוך הרבה (1/9)
אני יודע בדיוק מאיזה עד איזה מספר זהות הוא הספיק למשוך
על קצב איטי הוא לא משך, כי יש לי תיעוד עם מספור לפי כניסות של IP.
ומאידך כעת אין לי כל פיתרון לתת סיסמא ללא פרטים הקיימים במערכת, אין לי ברירה אחרת מלבד שימוש בנתון קיים. לא?
וכן מה שיש לו מספרי טלפון כבר יש לו. ואין מידע נוסף שניתן למשוך ממני..
@dovid אמר בישיבה על קברו, בלי סיסמא?:
זה בעיה אצל כמה משתמשים פה (ודוקא @חוקר פחות בקטע הזה), שהם חיים במירוץ מטורף עם פרויקטים חיים,
אם אני לא פחות במירוץ, אז מה יכול להיות יותר?
יש כאן מישהו שיש לו 48 שעות ביום?