Hoe zou ik dit probleem kunnen oplossen?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Snelle Jaap

Snelle Jaap

29/03/2021 14:59:41
Quote Anchor link
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. 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?
 
PHP hulp

PHP hulp

14/05/2021 02:25:29
 
- Ariën -
Beheerder

- Ariën -

29/03/2021 15:06:30
Quote Anchor link
Hebben we het echt over nieuwe browserschermen, of iets van een lightbox overlay waar je editor in staat?
 
Snelle Jaap

Snelle Jaap

29/03/2021 15:07:33
Quote Anchor link
Nee echt een los nieuw venster. Elk product heeft een form die de gegevens voor de editor post met target="blank".
 
- Ariën -
Beheerder

- Ariën -

29/03/2021 15:13:48
Quote Anchor link
Dit zal wel werken.

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 -
 
Snelle Jaap

Snelle Jaap

29/03/2021 15:26:31
Quote Anchor link
Thanks. Ik weet dat het kan want ik heb het gezien bij een aantal sites. De vraag is alleen hoe, misschien een update in de database wanneer je klaar bent met de edit en op de 1e pagina een ajax call elke +- 3 seconden, die kijkt wat de status is van de editor?

Hoop dat er een betere oplossing is dan dat.
 
- Ariën -
Beheerder

- Ariën -

29/03/2021 15:31:15
Quote Anchor link
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.
 
Ozzie PHP

Ozzie PHP

29/03/2021 15:33:55
Quote Anchor link
Dit iets?

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.
 
Thom nvt

Thom nvt

30/03/2021 07:52:51
Quote Anchor link
In plaats van pollen via AJAX kun je het model ook omdraaien.
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.
 
Snelle Jaap

Snelle Jaap

30/03/2021 09:34:34
Quote Anchor link
Thanks dat klinkt goed. Ik heb alleen totaal geen idee waar te beginnen. Ik kan gelukkig waarschijnlijk wel shell access regelen bij mijn hostingpartij.

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?
 
Thom nvt

Thom nvt

30/03/2021 09:40:23
Quote Anchor link
Het is inderdaad een learning-curve en vereist wat omdenken.

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.
 
- Ariën -
Beheerder

- Ariën -

30/03/2021 09:51:32
Quote Anchor link
Je moet zelf weten wat de kosten-baten zijn. Maar als je niet bekend bent met Websockets lijkt het mij sneller om het anders te doen :-P

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.
 
Ozzie PHP

Ozzie PHP

30/03/2021 13:47:01
Quote Anchor link
Eens met Ariën.

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.
 
Ward van der Put
Moderator

Ward van der Put

30/03/2021 15:41:30
Quote Anchor link
Als het voor een admin-backoffice is waar je bepaalde browsers kunt voorschrijven...

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/dialog
 
Snelle Jaap

Snelle Jaap

30/03/2021 16:13:41
Quote Anchor link
@Ozzie

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.
 
Ozzie PHP

Ozzie PHP

30/03/2021 16:36:43
Quote Anchor link
En het idee van Ariën met een lightbox-constructie is geen optie?
 
Snelle Jaap

Snelle Jaap

06/04/2021 11:00:03
Quote Anchor link
Ik heb het toch maar opgelost via de ajax manier. Later kan ik altijd nog kijken naar websockets, voor nu even te moeilijk.
 
Ad Fundum

Ad Fundum

06/04/2021 12:55:46
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.