Al een paar dagen doe ik ernstig m'n best om de TinyMCE 5 inline editor aan het werk te krijgen.
Dat lukt voor de helft: na het klikken in de div verschijnt de editor op de gewenste manier.
Maar een gewijzigde versie van de inhoud krijg ik met geen mogelijkheid in m'n php script.
Middels gebruik van de <textarea> tag krijg ik de editor permanent te zien, maar dat wil ik nu juist niet vandaar de keuze voor de inline optie.
De inhoudelijke update in het php script werkt echter naadloos.
Kent iemand dit probleem; en nog beter: Hoe kom ik er langs?
Thomas,
Dank voor de reactie en de les!
Je zegt onder meer: 'En dan zit je POST data in "excerpt" of wat dan ook, en niet in "pvpVar".'
Ik zit mezelf in de weg, dat is duidelijk. Maar ja: soms weet je niet wat je niet weet.
Ik snap niet alles van wat je schrijft; ik ga er mee aan de slag in het vertrouwen dat het kwartje gaat vallen.
'Ajax', tot dusver kende ik het alleen als voetbalclub.
Nogmaals dank.
[size=xsmall]Toevoeging op 05/10/2019 12:31:15:[/size]
Thomas,
Ik heb je code nagelezen en begrijp wat er gebeurd.
Je laatste zinnen zijn wat cryptisch:
1.
"Als je (dus) die "e" en "e.preventDefault()" weglaat, dan zul je zien dat er een element "woops" (oorspronkelijke naam in form) en niet "ajaxWoops" in het POST array zit."
Wil je dit nog toelichten?
2.
"En je komt ook bij ajax.php uit omdat dat de action was."
Vanzelf sprekend, denk ik dan, dat is immers de bedoeling van dat mechanisme. Of: bedoel je iets anders?
[size=xsmall]Toevoeging op 05/10/2019 12:48:05:[/size]
Thomas,
Nu snap ik ook wel waarom ik nooit bij AJAX ben uitgekomen. Deze link: https://www.w3schools.com/xml/ajax_intro.asp geeft duidelijk aan dat AJAX data van een server haalt; en dat doe ik in mijn applicatie niet.
Het verhaal tot nu toe stijft mij in de overtuiging dat TinyMCE hier iets laat liggen. Of: ik heb het in hun documentatie (of wat daar voor doorgaat) niet gevonden.
Normaal gesproken navigeer je naar een nieuwe pagina wanneer je op een hyperlink klikt of een formulier submit. Stel je zit dus op pagina A met een formulier die je POST naar pagina B. Na submitten zit je op pagina B. Bij een AJAX-request zit je op pagina A en blijf je op pagina A, terwijl in de achtergrond de data wordt gePOST naar pagina B. Dat is het verschil tussen de twee.
Het normale gedrag bij het submitten van een formulier is dat je dus wegnavigeert van A waarbij je alles naar B POST. Ingeval van een AJAX-request moet je dit standaard gedrag dus blokkeren (e.preventDefault()) omdat je in wezen het POSTen zelf handmatig uitvoert via $.post. Als je dus voor de AJAX-aanpak kiest is het dus NIET de bedoeling dat je wegnavigeert van de huidige pagina, anders schiet je namelijk je doel voorbij.
Met AJAX kun je trouwens zowel informatie ophalen als wegschrijven, het verkeer kan beide kanten opgaan. Als je informatie wegschrijft krijg je ook vaak terugkoppeling of dit gelukt is of niet.
Maar de vraag is dus, wil je gebruik maken van AJAX-requests, of wil je de normale "flow" volgen.
Daarbij nog het volgende, als je dan toch van de standaard manier van POSTen gebruik maakt is het een goede gewoonte om na afloop van de verwerking (in pagina B) direct weg te navigeren naar een andere pagina (zeg C). Dit is ook wel bekend als het POST/redirect/GET patroon. Al deze acties (A - het tonen van het formulier, B - het verwerken van het formulier, C - een of andere resultaat- of terugkoppelingspagina) zouden voor de goede orde ook volledig gescheiden moeten zijn.
Dit heeft wel gevolgen voor de administratie. Als je namelijk in de verwerking van je POST-data zit (B) en daar blijkt bij validatie dat de data om een of andere reden niet voldoet, dan zul je deze (onvolledige of niet kloppende) data weer op een of andere manier terug moeten stoppen in je formulier (A) en de gebruiker de melding geven dat deze zijn data moet aanvullen of aanpassen. En hiertoe zul je dus een algemeen stramien moeten introduceren die voorschrijft hoe je omgaat met formulieren en hoe je informatie weer (terug) overhevelt in je formulier indien nodig.
Maar dit is dus een gevolg van het wegnavigeren van een pagina, dit introduceert de noodzaak om informatie te "redden" (tijdelijk opslaan voor later gebruik), want er wordt standaard niets onthouden van een vorig request. Als je van A wegnavigeert naar B dan weet B niet dat je afkomstig bent van A. Je zou dus de informatie in een sessie kunnen stoppen om deze weer in het formulier in te voeren.
En als je hier geen zin in hebt dan zou je dus kunnen opteren voor de AJAX-aanpak, je hoeft hier geen informatie te "redden" omdat je nooit wegnavigeert van de invoerpagina, tenzij dus via de terugkoppeling van het wegschrijven via een AJAX POST het signaal wordt gegeven dat dit is gelukt.
Lijkt me wel dat je eerst voor een van de twee methoden kiest, en dan gaat uitzoeken hoe je dat fatsoenlijk opzet.
Hangt er ook een beetje vanaf hoe groot je applicatie is en hoeveel formulieren je in zijn totaliteit hebt.
Het zou al kunnen helpen als je, los van wat voor techniek dan ook, stap voor stap beschrijft wat alles functioneel zou moeten doen.
Als het slechts één of enkele formulieren betreft kan het eventueel wel wat meer "houtje touwtje" maar het staat wel zo netjes als het formulier, de validatie en de verdere afhandeling gewoon goed in elkaar zit. Plus je hebt dan na afloop wat beter in de vingers hoe je netjes met formulieren zou moeten omgaan.
Thomas,
Wat me nog bezig houdt - en voor een vraag stelt:
1.
In ajax.html vul ik in: banaan; en druk op go.
2.
De output van ajax.php is dan:
$_POST:
Array
(
[woops] => banaan
)
[end]
Dat verandert niet als ik in ajax.html de regel: e.preventDefault(); uit-commentarieer.
Hoe zit dat?
Voorts is dit een uitstekende basis om in test-project verder te experimenteren: Dank!
Mijn bovenstaande voorbeeld bestaat uit twee delen: het HTML-document (noem dit index.php oid), en het bestand voor de afhandeling van een AJAX-POST (ajax.php). Een gebruiker roept nooit rechtstreeks ajax.php aan, dit gebeurt indirect, via javascript, op de achtergrond.
Als je van de AJAX-methode gebruik maakt navigeer je nooit weg van index.php tenzij de javascript je hiertoe instrueert naar aanleiding van de terugkoppeling van de AJAX-POST (de anonieme callback functie function(data) { ... }, het derde argument van $.post).
Ik zou het voorbeeld eventueel kunnen uitbreiden om dit (beter) te demonstreren.
Het geheel is dus een geautomatiseerd samenspel tussen JavaScript aan de client-zijde en PHP aan de server-zijde, terwijl de gebruiker op index.php wacht op terugkoppeling na het invullen en versturen van het formulier.
In de variant zonder AJAX is dit het normale schaakspel tussen browser en server (request en response), waarbij elke volgende stap zich op een "aparte" pagina afspeelt.
In wezen gebeurt in beide varianten precies hetzelfde, wat iets verschilt is wat een gebruiker hiervan ziet.
Thomas,
Dank voor de hulp, de les en - vooral - je vasthoudendheid.
Ik laat dit onderwerp nu even voor wat het is en verschuif 'AJAX' naar zijn voor mij oorspronkelijke status (die van van voetbalclub).
TinyMCE versie 5 laat ik definitief voor wat het is; het doet gewoon niet wat het beloofd. Of: ik snap er echt helemaal niets van.
Ik ga CKEditor downloaden en zien of dat "out of the box" wél doet wat ik wil; dan kan ik verder met m'n project. TinyMCE heeft me al een week gekost, nu vind ik het welletjes. CKEditor ken ik van Drupal en ik vertrouw erop dat het nog steeds min of meer het zelfde is.