Vinnaren i pepparkakshustävlingen!
2024-07-22, 11:22
  #1
Medlem
Finikantens avatar
Den vre koden hr gr s att systemet kollar vilken video som ska visas p en dynamisk sida genom att utg frn den aktuella sidadressen:

Kod:
let url = wixLocation.url;
      let pageId = url.substr(url.lastIndexOf("/") + 1);

$w.onReady(async function () {
      let videoInfo = await getVideoInfo(pageId);
        $w("#text331").text = (videoInfo.title);
        $w("#image66").src = (videoInfo.frontpic);
        $w("#text330").text = (videoInfo.creatorName);

Under filmen finns ett flt dr tittare kan lmna kommentarer och ge filmen en rating. Som du ser s r det kopplat till dataset1 men jag vet inte hur man kombinerar den vre koden med den nedre koden genom datasetet? Gr man det genom ett filter? Jag tror att man tminstone ska brja med att lgga
Kod:
wixData.get("Videos", pageId)
direkt under
Kod:
function filterComments
men i vrigt r jag vldigt osker:

Kod:
let bounceCenter = {
    "duration": 500,
    "direction": "center",
    "intensity": "medium",
};
function login() {
    wixUsers.promptLogin({ "mode": "login" })
}
    $w.onReady(() => {
    filterComments()
    $w("#logout").onClick(logoutAndRedirect);
})
function logoutAndRedirect(event) {
    Promise.all([wixLocation.to('/login'), wixUsers.logout()]);
}
function filterComments() {
    $w('#dataset1').onReady(() => {
        $w('#dataset1').setFilter(
            wixData.filter()
            .eq("title", $w("#dataset1").getCurrentItem()._id)
        ).then(() => {
            let currentItem = $w("#dataset1").getCurrentItem();
            let totalCount = $w("#dataset1").getTotalCount();
            $w('#text344').text = totalCount.toString() + " ratings and comments"
            wixData.aggregate("Videos")
                .filter(wixData.filter().eq("title", $w('#dataset1').getCurrentItem()._id))
                .sum("rating", "rating")
                .run()
                .then((results) => {
                    if (results.items.length < 1) {
                        $w('#ratingsDisplay').rating = 0
                    } else {
                        let sumAmount = results.items[0].rating
                        let rating = Number(sumAmount / totalCount).toFixed(1)
                        $w('#ratingsDisplay').rating = Number(rating)
                    }
                });
            likeFunctionComment()
            addComment()
            deleteComment()
        })
    })
}
function deleteComment() {
    wixData.get("Videos", pageId)
    $w('#repeater1').forEachItem(($item, itemData, index) => {
        console.log(itemData.currentUserId + " === " + wixUsers.currentUser.id)
        if (itemData.currentUserId === wixUsers.currentUser.id) {
            $item("#deleteComment").show()
        } else {
            $item("#deleteComment").hide()
        }
    })
    $w('#deleteComment').onClick((event) => {
        wixData.get("Videos", pageId)
        let $item = $w.at(event.context)
        let currentItem = $item("#dataset1").getCurrentItem()
        $item('#deleteComment').disable()
        $item('#deleteComment').label = "Deleting..."
        wixData.remove("Videos", currentItem._id)
            .then(() => {
                $w('#dataset1').refresh()
                setTimeout(() => {
                    let totalCount = $w("#dataset1").getTotalCount();
                    $w('#text344').text = totalCount.toString() + " ratings and comments"
                    setTimeout(() => {
                        wixData.aggregate("Videos")
                            .filter(wixData.filter().eq("title", $w('#dataset1').getCurrentItem()._id))
                            .sum("rating", "rating")
                            .run()
                            .then((results) => {
                                if (results.items.length < 1) {
                                    $w('#ratingsDisplay').rating = 0
                                } else {
                                    let sumAmount = results.items[0].rating
                                    let rating = Number(sumAmount / totalCount).toFixed(1)
                                    $w('#ratingsDisplay').rating = Number(rating)
                                }
                            });
                    }, 2500)
                }, 2000)
            })
    })
}
function addComment() {
      wixData.get("Videos", pageId)
        $w('#button3').onClick(() => {
        $w("#image63").hide();
        $w("#image62").show();
        $w("#audioPlayer").play();
        setTimeout(() => {
            $w("#image62").hide();
            $w("#image63").show();
        }, 150);
        let value = $w('#textBox2').value.replace(/\s+/g, ' ')
        if (value === ' ' || value === '') {
            $w('#button3').enable()
            $w('#infotext').text = 'Please enter a written comment'
            $w('#infotext').show()
            setTimeout(() => {
                $w('#infotext').hide()
            }, 5000)
        } else {
            if ($w('#ratingsInput').valid) {
                insertComment()
            } else {
                $w('#infotext').text = 'Please first add a star rating for this video!'
                $w('#infotext').show()
                setTimeout(() => {
                    $w('#infotext').hide()
                }, 9000)
            }
        }
    })
}
Citera
2024-07-22, 12:08
  #2
Medlem
Har du lst dokumentationen fr wixData?

https://dev.wix.com/docs/velo/api-re...ix-data/filter
Citera
2024-07-22, 12:37
  #3
Medlem
Finikantens avatar
Citat:
Ursprungligen postat av GorillaGulleGull
Har du lst dokumentationen fr wixData?

https://dev.wix.com/docs/velo/api-re...ix-data/filter

Ja men frstr inte vad jag ska skriva hr (Velos exempelkod):

Kod:
$w("#myDataset").setFilter(
  wixData.filter().startsWith("lastName", "D").ge("age", "21"),
);

Typ s hr eller vad?
Kod:
$w("#dataset1").setFilter(
  wixData.filter().startsWith("url.substr(url.lastIndexOf("/") + 1"),
);
__________________
Senast redigerad av Finikanten 2024-07-22 kl. 12:42.
Citera
2024-07-22, 15:07
  #4
Medlem
Mileistas avatar
Fr att kombinera din nuvarande kod med datasetet och gra det mjligt att filtrera kommentarer och betyg baserat p videon som visas, behver du anpassa filterComments-funktionen s att den anvnder pageId fr att filtrera datasetet. Du kan brja med att lgga till wixData.get("Videos", pageId) fr att f informationen om videon frn datasetet och anvnda den informationen fr att filtrera kommentarer.

Hr r en uppdaterad version av din kod:
Kod:
let url = wixLocation.url;
let pageId = url.substr(url.lastIndexOf("/") + 1);

$w.onReady(async function () {
    let videoInfo = await getVideoInfo(pageId);
    $w("#text331").text = (videoInfo.title);
    $w("#image66").src = (videoInfo.frontpic);
    $w("#text330").text = (videoInfo.creatorName);
    filterComments(pageId);
    $w("#logout").onClick(logoutAndRedirect);
});

function login() {
    wixUsers.promptLogin({ "mode": "login" });
}

function logoutAndRedirect(event) {
    Promise.all([wixLocation.to('/login'), wixUsers.logout()]);
}

function filterComments(pageId) {
    wixData.get("Videos", pageId).then(video => {
        $w('#dataset1').onReady(() => {
            $w('#dataset1').setFilter(
                wixData.filter()
                .eq("videoId", video._id)
            ).then(() => {
                let currentItem = $w("#dataset1").getCurrentItem();
                let totalCount = $w("#dataset1").getTotalCount();
                $w('#text344').text = totalCount.toString() + " ratings and comments";
                wixData.aggregate("Comments")
                    .filter(wixData.filter().eq("videoId", video._id))
                    .sum("rating", "rating")
                    .run()
                    .then((results) => {
                        if (results.items.length < 1) {
                            $w('#ratingsDisplay').rating = 0;
                        } else {
                            let sumAmount = results.items[0].rating;
                            let rating = Number(sumAmount / totalCount).toFixed(1);
                            $w('#ratingsDisplay').rating = Number(rating);
                        }
                    });
                likeFunctionComment();
                addComment(video._id);
                deleteComment(video._id);
            });
        });
    });
}

function deleteComment(videoId) {
    $w('#repeater1').forEachItem(($item, itemData, index) => {
        if (itemData.currentUserId === wixUsers.currentUser.id) {
            $item("#deleteComment").show();
        } else {
            $item("#deleteComment").hide();
        }
    });

    $w('#deleteComment').onClick((event) => {
        let $item = $w.at(event.context);
        let currentItem = $item("#dataset1").getCurrentItem();
        $item('#deleteComment').disable();
        $item('#deleteComment').label = "Deleting...";
        wixData.remove("Comments", currentItem._id).then(() => {
            $w('#dataset1').refresh();
            setTimeout(() => {
                let totalCount = $w("#dataset1").getTotalCount();
                $w('#text344').text = totalCount.toString() + " ratings and comments";
                setTimeout(() => {
                    wixData.aggregate("Comments")
                        .filter(wixData.filter().eq("videoId", videoId))
                        .sum("rating", "rating")
                        .run()
                        .then((results) => {
                            if (results.items.length < 1) {
                                $w('#ratingsDisplay').rating = 0;
                            } else {
                                let sumAmount = results.items[0].rating;
                                let rating = Number(sumAmount / totalCount).toFixed(1);
                                $w('#ratingsDisplay').rating = Number(rating);
                            }
                        });
                }, 2500);
            }, 2000);
        });
    });
}

function addComment(videoId) {
    $w('#button3').onClick(() => {
        $w("#image63").hide();
        $w("#image62").show();
        $w("#audioPlayer").play();
        setTimeout(() => {
            $w("#image62").hide();
            $w("#image63").show();
        }, 150);

        let value = $w('#textBox2').value.replace(/\s+/g, ' ');
        if (value === ' ' || value === '') {
            $w('#button3').enable();
            $w('#infotext').text = 'Please enter a written comment';
            $w('#infotext').show();
            setTimeout(() => {
                $w('#infotext').hide();
            }, 5000);
        } else {
            if ($w('#ratingsInput').valid) {
                insertComment(videoId);
            } else {
                $w('#infotext').text = 'Please first add a star rating for this video!';
                $w('#infotext').show();
                setTimeout(() => {
                    $w('#infotext').hide();
                }, 9000);
            }
        }
    });
}

function insertComment(videoId) {
    let comment = {
        videoId: videoId,
        text: $w('#textBox2').value,
        rating: $w('#ratingsInput').value,
        currentUserId: wixUsers.currentUser.id
    };

    wixData.insert("Comments", comment).then(() => {
        $w('#dataset1').refresh();
        setTimeout(() => {
            let totalCount = $w("#dataset1").getTotalCount();
            $w('#text344').text = totalCount.toString() + " ratings and comments";
            setTimeout(() => {
                wixData.aggregate("Comments")
                    .filter(wixData.filter().eq("videoId", videoId))
                    .sum("rating", "rating")
                    .run()
                    .then((results) => {
                        if (results.items.length < 1) {
                            $w('#ratingsDisplay').rating = 0;
                        } else {
                            let sumAmount = results.items[0].rating;
                            let rating = Number(sumAmount / totalCount).toFixed(1);
                            $w('#ratingsDisplay').rating = Number(rating);
                        }
                    });
            }, 2500);
        }, 2000);
    });
}
Citera
2024-07-22, 20:18
  #5
Medlem
Finikantens avatar
Okej, tack men br jag ven lgga in ngon filtertext i sjlva datasetet?
Citera
2024-07-23, 15:59
  #6
Medlem
Finikantens avatar
Vad jag behver veta r hur man kan ange detta som ett filter i datasetet (allts inte i koden):

Kod:
let url = wixLocation.url;
let pageId = url.substr(url.lastIndexOf("/") + 1);

$w.onReady(async function () {
let videoInfo = await getVideoInfo(pageId);
Citera
2024-07-23, 21:45
  #7
Medlem
Finikantens avatar
Lsningen var faktiskt s enkel som att anvnda sidans dynamiska dataset istllet fr ett standard-dataset (utan att behva lgga ngot filter). Men nu har jag ett annat problem. Nr en medlem lgger in en videokommentar s blir en fregende kommentar verskriven av den nya. Vad kan det bero p?
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in