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

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
shpro654S

shpro654

@shpro654
אודות
פוסטים
46
נושאים
14
שיתופים
0
קבוצות
0
עוקבים
0
עוקב אחרי
0

פוסטים

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

  • וורדפרס ומסד נתונים
    shpro654S shpro654

    @dovid אמר בוורדפרס ומסד נתונים:

    800 שורות זה נורא...

    שלא להוציא לעז... הפונקציה לשמירה לdb בתוסף, היא 50 שורות, כל השאר להצגה וייצוא לcsv

    תכנות

  • וורדפרס ומסד נתונים
    shpro654S shpro654

    @dovid אמר בוורדפרס ומסד נתונים:

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

    @dovid אמר בוורדפרס ומסד נתונים:

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

    מה השתנה?

    עברתי מלמעלה על התוסף הנ"ל, הוא ממש קליל (קובץ php בודד, 800 שורות)
    לשמירה - אתבסס עליו, רק אשלח לטבלה חדשה ולא לטבלת posts (התוסף מוסיף פונקציה לאלמנטור).
    להצגה, אני צריך להחליט אם להתבסס על וורדפרס, (כתיבת תוסף בעצם) או להביא ולהציג לבד.

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

    תכנות

  • וורדפרס ומסד נתונים
    shpro654S shpro654

    @dovid אמר בוורדפרס ומסד נתונים:

    בדוק את התוסף

    התוסף מוסיף ב-db פוסט חדש בטבלת posts לכל טופס שנשלח, (פוסט חדש לכל שליחה ושליחה, ושורות postmeta לתוכן)
    מצד אחד זה מאפשר באמת לנצל את הפונקציות המובנות של וורדפרס לקריאת הנתונים.
    מצד שני, 'בחלומי', יש טבלה נפרדת ב-db לנתונים שאני אוסף (או שזה סתם סיכון להיכנס למקום כזה)

    תכנות

  • וורדפרס ומסד נתונים
    shpro654S shpro654

    תודה רבה,
    נתחיל ונראה

    @dovid אמר בוורדפרס ומסד נתונים:

    זה ממש המומחיות של wordpress

    זו מומחיות של וורדפרס או של php?
    כלומר אם אני כותב דף php שמביא מה-db, מטבלה שיצרתי שם
    איפה וורדפרס בתמונה?

    תכנות

  • וורדפרס ומסד נתונים
    shpro654S shpro654

    @dovid אמר בוורדפרס ומסד נתונים:

    ההצגה זה ממש קל

    בשתי מילים - איך?

    @dovid אמר בוורדפרס ומסד נתונים:

    השליחה תלויה באיך הטפסים בנויים

    לכתחילה אלמנטור

    תכנות

  • וורדפרס ומסד נתונים
    shpro654S shpro654

    @dovid
    כרגע חיברתי את זה לגוגל-שיטס
    אבל חשבתי לשלוח את זה ישירות לדטה-בייס של הוורדפרס (mysql)
    והשאלה היא הן על השליחה לשם,
    והן על ההצגה משם בצורה מרוכזת

    תכנות

  • וורדפרס ומסד נתונים
    shpro654S shpro654

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

    תכנות

  • ספאם - רק ממייל אחד למייל אחד
    shpro654S shpro654

    @chagold
    לא הכרתי,
    ציון 9.9/10
    אין משהו מהותי להבנתי

    1.JPG

    אינטרנט

  • ספאם - רק ממייל אחד למייל אחד
    shpro654S shpro654

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

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

    מה עושים?

    אינטרנט

  • מחפש בדחיפות בונה אתר תדמית
    shpro654S shpro654

    כדי להבין יותר על פלטפורמות ושות'
    מה הפלטפורמות האפשריות לבקשה של מנצפך?
    לא וורדפרס, כי היא הרבה php בבק אנד.
    לא כתיבה מאפס של html css js, כי בכל זאת אתר תדמית, אולי עם כמה עמודים וטמלייטים.
    סו?

    תכנות

  • setInterval
    shpro654S shpro654

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

    let aSliderInterval = ''
    
    const getAds = () => {
    
        fetch... {
                const { files: ads } = data;
                checkIfFolderChanghd(ads) && setAds(ads);
        }
    }
    
    function checkIfFolderChanghd(ads) {
    
        const adminAdsLength = adminSettings.adsLength
        let adsLength = ads.length;
        let newUpdate = '';
    
        if (!adsLength) return true;
    
        if (adsLength < adminAdsLength || adsLength > adminAdsLength) {
            return true;
        }
    
        for (let i = 0; i < adsLength; i++) {
            const { fileDateCreated } = ads[i];
            if (fileDateCreated > newUpdate) {
                newUpdate = fileDateCreated;
            }
        }
    
        if (newUpdate <= adminSettings.update) {
            return false;
        }
    
        return true;
    }
    
    
    function setAds(ads) {
    
        let newUpdate = '';
        let adsLength = ads.length;
    
        const adsSlider = document.querySelector('#ads-slider');
        adsSlider.innerHTML = '';
    
        if (!adsLength) {
            aSliderInterval && clearInterval(aSliderInterval);
            setBoardFooter(0, 0, 0);
            return
        }
    
        for (let i = 0; i < adsLength; i++) {
            const { fileDateCreated, id } = ads[i];
    
            const adImg = document.createElement('img');
            adImg.className = 'ad ad-none';
            adImg.src = `https://drive.google.com/uc?id=${id}`;
            adsSlider.appendChild(adImg);
    
            if (fileDateCreated > newUpdate) {
                newUpdate = fileDateCreated;
            }
        }
    
        adminSettings.update = newUpdate;
        adminSettings.adsLength = adsLength;
    
        const { maxAds } = adminSettings;
        aSliderInterval && clearInterval(aSliderInterval);
        aSlider(0, Math.min(maxAds, adsLength), adsLength);
    
        if (adsLength > maxAds) {
    
            aSliderInterval = setInterval(() => {
                const { from, to } = adminSettings;
                aSlider(from, to, adsLength);
            }, 30000); //30 s
        }
    }
    
    
    function aSlider(from, to, adsLength) {
    
        const { maxAds } = adminSettings;
        const adsDom = document.querySelectorAll('.ad');
    
        for (var ad of adsDom) {
            ad.className = 'ad ad-none';
        }
    
        for (let i = from; i < to; i++) {
            adsDom[i].className = 'ad';
        }
    
        setBoardFooter(from, to, adsLength);
    
        if (to === adsLength) {
            adminSettings.from = 0;
            adminSettings.to = maxAds;
        }
        else {
            adminSettings.from = to;
            adminSettings.to = Math.min(adsLength, to + maxAds);
        }
    }
    
    
    function setBoardFooter(from, to, lebgth) {
        const adsFooter = document.querySelector('.a-footer');
    
        if (!lebgth) return adsFooter.innerHTML = 'אין מודעות';
    
        adsFooter.innerHTML = `מודעות ${from + 1}-${to} מתוך ${lebgth}`;
    }
    
    setInterval(() => {
        getAds();
    }, 900000); //15 min
    

    ושאלה על הדרך (ת"מ):
    מה הדרך הנכונה / המקובלת לשרשור פונקציות (מ-get, ל-set, ל-slider)
    בשרשור מתוך הפונקציות כמו שעשיתי,
    או במרכז אחד שמטפל, מקבל return ולפיו ממשיך הלאה?

    תכנות

  • google app script - cross
    shpro654S shpro654

    קריאה ל-google app script (תוסף ל-google sheets, עבור api ל-google apps, במקרה דנן מביא נתונים מ-google drive).

    8.JPG

    תכנות

  • setInterval
    shpro654S shpro654

    @dovid אמר בsetInterval:

    הכי חשוב: אין שום סיבה לרקורסיה וממילא היא ממש אסורה גם אם היא תפעל תקין.

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

    @dovid אמר בsetInterval:

    כשאתה רוצה ערך נמוך או גבוה מבין שניים הרבה יותר קריא להשתמש בMath.max וmin בהתאמה.

    לגבי מה? (איפה בקוד?)

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

    רענון הדף אחת ליום או משהו כזה, "ליתר בטחון", כן?

    תודה רבה!

    תכנות

  • setInterval
    shpro654S shpro654

    תיאור:
    המטרה היא להציג מודעות (jpg), שמגיעות בקריאה ב-api של גוגל דרייב (כן, נכון, ה-cros וכו').
    לפונקציה הראשית יש setInterval כל 15 דקות לקריאה לשרת. בודק אם השתנו / נוספו מודעות.

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

    1. ה-Interval הפנימי משתכפל בחזקה.
    2. ה-clearInterval לא מאפס את את ה-Interval הפנימי.
    3. האם זו הדרך הנכונה בכלל לפתור את הבעיה?
    4. code review... אשמח מאוד. תודה.

    ולקוד בהרחבה:

    let aSliderInterval = ''
    
    const getAds = () => {
    
        fetch... {
    
            const { files: ads, LastUpdated } = data;
    
                let adsLength = ads.length;
                if (adsLength > 0) {
                    for (let i = 0; i < adsLength; i++) {
                        const { fileDateCreated, name } = ads[i];
                        if (fileDateCreated > newUpdate) {
                            newUpdate = fileDateCreated;
                        }
                        if (adsLength < adminNote.adsLength) {
                            adminNote.adsLength = adsLength;
                            clearInterval(aSliderInterval);
                            setAds(ads, newUpdate);
                            return
                        }
                        if (newUpdate <= adminNote.update) {
                            return
                        }
                    }
                    adminNote.adsLength = adsLength;
                    clearInterval(aSliderInterval);
                    setAds(ads, newUpdate);
                }
            }
    }
    
    
    function setAds(ads, newUpdate) {
    
        const adsSlider = document.querySelector('#ads-slider');
        adsSlider.innerHTML = '';
        const adsFooter = document.querySelector('.a-footer');
        let adsLength = ads.length;
    
        for (let i = 0; i < adsLength; i++) {
            const adImg = document.createElement('img');
            adImg.className = 'ad ad-none';
            adImg.src = `https://drive.google.com/uc?id=${ads[i].id}`;
            adsSlider.appendChild(adImg);
        }
    
        adminNote.update = newUpdate;
    
        aSlider(0, adsLength > 3 ? 4 : adsLength, adsLength);
    }
    
    function aSlider(from, to, adsLength) {
    
        console.log('aSlider');
        const adsDom = document.querySelectorAll('.ad');
    
        for (let i = 0; i < adsLength; i++) {
            adsDom[i].className = 'ad ad-none';
        }
    
        for (let i = from; i < to; i++) {
            adsDom[i].className = 'ad';
        }
    
        const adsFooter = document.querySelector('.a-footer');
        adsFooter.innerHTML = `מודעות ${from + 1}-${to} מתוך ${adsLength}`;
    
    
        if (adsLength > 4) {
            aSliderInterval = setInterval(() => {
                if (adsLength <= to) to = 0;
                aSlider(to, to + 4 > adsLength ? adsLength : to + 4, adsLength)
            }, 30000);
        }
    }
    
    getAds();
    
    setInterval(() => {
        getAds();
    }, 900000); //15 min
    
    תכנות

  • google app script - cross
    shpro654S shpro654

    כן,
    וכפי שכתבתי בשאלה בראש האשכול, יש לי 2 קריאות
    אחד מ-google app script (תוסף ל-google sheets, עבור api ל-google apps).
    והשני קריאה לקבלת json מ-google sheets

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

    A future release of Chrome will only deliver cookies with cross-site requests
    

    @dovid אמר בgoogle app script - cross:

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

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

    תכנות

  • google app script - cross
    shpro654S shpro654

    בדיוק אותו דף, שגיאה שונה בפיירפוקס.
    אולי כרום לא חוסם את הcros כי זה של גוגל?

    תכנות

  • google app script - cross
    shpro654S shpro654

    יצרתי קריאה ל-google app script (תוסף ל-google sheets, עבור api ל-google apps).
    וכמו"כ קריאה לקבלת json מ-google sheets

    תגובת הדפדפן:
    (מבצע את הקריאות, אך מתריע:)

    A cookie associated with a cross-site resource at http://google.com/ was set without the `SameSite` attribute. A future release of Chrome will only deliver cookies with cross-site requests if they are set with `SameSite=None` and `Secure`. You can review cookies in developer tools under Application>Storage>Cookies and see more details at https://www.chromestatus.com/feature/5088147346030592 and https://www.chromestatus.com/feature/5633521622188032.
    

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

    (בבדיקה נוספת, רק chrome מבצע את הקריאות, firefox חוסם לגמרי:

    Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https//..... (Reason: CORS request did not succeed).
    
    תכנות

  • setInterval
    shpro654S shpro654

    דף שמוצג על מסך פלאזמה, מה שאומר שעקרונית, יתכן ופותחים אותו ולא סוגרים אותו במשך חודשים.
    מה שעשיתי כרגע:
    setInterval - כל 15 דקות, קריאה לשרת.
    ו- http-equiv=refresh (ב-html) אחת ליום / כמה שעות.
    האם זו הדרך הנכונה?


    הפונקציה שקוראת לשרת (כזכור ב- setInterval כל 15 דק'),
    קוראת לפונקצית המשך שבתוכה יש setInterval פנימי.
    ה-clearInterval הפנימי קורא שוב לפונקציה שבה הוא נמצא (רקורסיה(?)
    עשיתי clearInterval ל-set הפנימי, בכל קריאה חדשה של setInterval לפונקציה החיצונית,
    (וזו הסיבה למה השתמשתי ב-setInterval ולא ב-setTimeOut לרקורסיה)
    אך לא רק שזה לא מתאפס, אלא הרקורסיה משתכפלת בריבוע.

    תכנות

  • אתר סטטי (או לא?)
    shpro654S shpro654

    אני רוצה לבנות אתר, בלי וורדפרס, אבל גם בלי שפת צד שרת ממשית (php/node).
    אסביר,
    לצורך הדוגמא, מדובר באתר של מתכונים, הקובץ של כל המתכונים הוא לא כבד, ולכן אין לי סיבה להרים בשבילו דטה בייס. אני גם לא צריך לכתוב לשרת, אלא רק למשוך מידע.
    הפונקציונליות מסתכמת בגדול בתצוגת מתכון לפי חיפוש (מאוד מסוים ומוגדר). או בדפדפוף בין המתכונים.
    מה שאומר לכאורה שאני יכול לנהל את הפונקציונליות בצד לקוח בלבד.
    כמו"כ לא צריך יצירת קשר וכדו', מה שמייתר ג"כ את הצורך בשפת צד שרת.
    שאלתי:
    האם אני צודק?
    ואם כן, מה האחסון שאני מחפש לאתר כזה?
    כמו"כ, האם נכון שהטמעה של גוגל אנליטיקס וכדו', ג"כ לא אמור להיות בעיה?

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

    תכנות

  • hide או remove
    shpro654S shpro654

    ואם כבר, אז, איך באמת עושים את הרינדור הזה?

    תכנות
  • 1
  • 2
  • 3
  • 2 / 3
  • התחברות

  • אין לך חשבון עדיין? הרשמה

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