Hoe zou ik dit probleem kunnen oplossen?
Nou wil ik graag in het originele venster waar de producten staan, een vinkje tonen wanneer het bewerken voor dat product klaar is en het editor scherm gesloten is. Hoe kan ik dat doen?
Ik moet dus aan de hand van een actie (knop klik) in het editor scherm, zien in het 1e scherm (producten pagina) dat de bewerking is afgerond. Hoe kan dat?
Hebben we het echt over nieuwe browserschermen, of iets van een lightbox overlay waar je editor in staat?
Nee echt een los nieuw venster. Elk product heeft een form die de gegevens voor de editor post met target="blank".
https://www.google.com/amp/s/www.geeksforgeeks.org/how-to-detect-browser-or-tab-closing-in-javascript/amp/
Edit:
Dat gaat over een parent window zelf....
Ik ga even verder op zoek.
Gewijzigd op 29/03/2021 15:18:15 door - Ariën -
Hoop dat er een betere oplossing is dan dat.
Ik ben bang dat er niks anders opzit dan dat. Of je moet een overlay (lightbox achting iets) maken voor je editor, waarmee je een callback kan doen als je het sluit.
https://stackoverflow.com/questions/9388380/capture-the-close-event-of-popup-window-in-javascript/9388451
2e voorbeeldje ... waar nu new_window staat gebruik je dan voor ieder product een andere naam product_1_editor, product_2_editor, product_3_editor enz. zodat je weet welk venster wordt afgesloten.
Het is niet persé eenvoudig (ook qua gebruikte technieken/servers) maar wel een erg elegante oplossing.
In venster A zet je een Websocket verbinding naar de server op en bij het opslaan in venster B push je via dat websocket de nieuwe status.
Dat is een stuk betrouwbaarder dan "venster gesloten" detecteren, dat kan namelijk ook gewoon via het kruisje gebeuren.
Websocket vereist wel dat je een proces permanent op de server-kant hebt draaien, voor PHP hebje de library Ratchet die hier in kan voorzien.
Een pub/sub model om data tussen het stateless stuk en de Websocket server te versturen maakt het vervolgens helemaal asynchroon.
Hier zie ik hoe je zo'n websocket proces kan starten:
https://medium.com/@cn007b/super-simple-php-websocket-example-ea2cd5893575
Zo'n proces zou dan permanent moeten draaien via Ratchet?
Zo'n proces zou inderdaad permanent moeten draaien, je zou dat op Linux met supervisord of een systemd-unit kunnen bewerkstelligen.
Om te synchroniseren tussen het websocket deel en het stateless deel kun je een messagequeue gebruiken, daar zijn verschillende oplossingen voor. Resque is een Redis-gebaseerde oplossing en daardoor erg light-weight.
Popups genereren is niet echt meer van deze tijd. Een lightbox is praktischer en kent vaak wel een onClose-achtig evenement zodat je direct in de DOM de actiestatus van het desbetreffende bericht kan aanpassen.
Nog even terug naar het probleem.
"Ik heb een pagina waar producten op staan. Elk product heeft een knop waarmee je een editor opent in een new window, hierin kun je het product bewerken. Zodra je klaar bent met bewerken klik je op een knop die het bewerken afrond en het venster sluit. Nou wil ik graag in het originele venster waar de producten staan, een vinkje tonen wanneer het bewerken voor dat product klaar is en het editor scherm gesloten is."
Ik neem aan dat je zo'n vinkje puur een 'visueel hulpje' is, zodat degene die aan het bewerken is weet dat hij/zij dat product al heeft bewerkt? Wat je dan ook nog zou kunnen doen, en dat is eigenlijk een nog veel simpelere oplossing, is het vinkje inschakelen zodra iemand de editor opent. Dus in plaats van dat je achteraf een vinkje plaatst, plaats je het vinkje direct bij het openen van de editor/pop-up. Dan wordt het vinkje altijd geplaatst en hoef je geen moeilijke constructies uit te voeren. Het is maar een ideetje ... En in plaats van een vinkje zou je dan eventueel ook nog een sterretje * kunnen plaatsen. Met een vinkje geef je meestal een soort van status (goedgekeurd) aan. Met een sterretje geef je aan 'deze heb je al geopend/gezien'. Je geeft daarmee niet aan of er iets is aangepast, en daarmee los je ook het probleem op dat iemand misschien niks aanpast en het venster gewoon afsluit.
Het is om te laten zien dat een bewerking/ontwerp goedgekeurd is. Elk product kan door een gebruiker worden bewerkt met bijvoorbeeld een eigen foto, of tekst. Pas nadat de bewerking is goedgekeurd wil ik dat tonen aan de hand van een vinkje. Het is dus niet de bedoeling als een gebruiker klikt op de knop naar de editor en hem vervolgens sluit zonder wat te bewerken, dat dan ook een vinkje te zien is.
@Ward nee het is een webshop.
En het idee van Ariën met een lightbox-constructie is geen optie?
Ik heb het toch maar opgelost via de ajax manier. Later kan ik altijd nog kijken naar websockets, voor nu even te moeilijk.
Meerdere tabs of browservensters is een bad practice als je met websessies wilt werken. Blijf vooral binnen hetzelfde venster, anders krijg je er alleen maar voor iets interface-achtigs een heleboel gratis extra's bij waar je niet op zit te wachten.