Mixed Reality dev- HoloLens2, Magic Leap, Quest, Unity, Unreal Engine, 3ds max

Driving a cadillac in a fool's parade.

Ben inmiddels met iets heel anders bezig: een inschrijfsysteem voor workshop voor een klein festivalletje (allemaal vrijwilligers).
Er zijn meerdere soorten workshops en elke soort start om het uur. Mensen mogen zich eigenlijk maar voor 1 type workshop inschrijven.
Momenteel is elk tijdslot een aparte node.
Ik gebruik node_registrations. Het enige wat mist is het inbouwen van die limiet. Ik zit te denken:
1. elke workshop van een taxonomy tag voorzien en dan checken of die tag al voorkomt in de node_registrations van de user
2. of elk type workshop een ander content type maken en dan checken of het content type niet al voorkomt in de registrations van de user..
Op Drupal.org kreeg ik antwoord hoe ik het deels kan oplossen:
Implement hook_node_registration_access() (to hide form and page/tab) or hook_form_node_registration_form_alter() to add a custom validation error/message.
Maar ik weet nog niet hoe ik kan checken of een taxonomy tag of content type al in de registrations van een gebruiker voorkomt. Ik denk dat het een die-hard DB query moet worden oid?
Mixed Reality dev- HoloLens2, Magic Leap, Quest, Unity, Unreal Engine, 3ds max
Met de functie _node_registration_event_nodes kan je alle event nodes ophalen.
Over deze nodes loop je dan en voer je de volgende functie uit _node_registration_user_registered($node, $account = NULL). Die kijkt of je bent ingeschreven voor een bepaald event.
Als daar niets uitkomt weet je dat de user nog niet ingeschreven is op events.
Functies zijn te vinden in bestand node_registration.api.inc
1. Fetch all nids from nodes that have this term, using an EntityFieldQuery
2. Fetch all registrations from this user with these nids
3. If there are any, they have already registered for this type
Hoewel ik Drupal wel aardig onder de knie heb ben ik nogal noob als het op development aankomt.
Afgezien van de check weet ik niet precies wanneer die check moet worden uitgevoerd.
Nu heb ik een testje dat inderdaad aangeroepen wordt als ik me registreer:
1
2
3
4
5
| function limit_registrations_by_taxonomy_field_attach_submit(){ drupal_set_message(t('test'), 'error'); } |
edit: heb grote moeite om de taxonomy term van de huidige pagina te laden.
geprobeerd:
1
2
3
| $test1 = taxonomy_term_load(arg(2)); $test2 = menu_get_object('taxonomy_term', 2); $test3 = $node->field_term['und']['0']['tid']; |
tips iemand?

[Voor 52% gewijzigd door Menesis op 03-05-2015 19:52]
Mixed Reality dev- HoloLens2, Magic Leap, Quest, Unity, Unreal Engine, 3ds max
1. Niet zeker wanneer mijn module te starten (momenteel heb ik: function limit_registrations_by_taxonomy_field_attach_submit ($ knooppunt) {)
In de documentatie van node registrations las ik dat de functie "node_registration_submit" wordt aangeraden. Maar afaik is dit niet een hook. Hoe moet je dat dan gebruiken? halverwege hier
2. Ik ben erin geslaagd om alle nodeid's voor een bepaalde taxonomie term te krijgen, maar kan niet achterhalen hoe ik de term van de huidige pagina te pakken krijg.
3. Ik weet niet Hoe ik alle registraties kan ophalen voor een bepaalde userid. Via _node_registration_user_registered ($ node $ account)?
4. Hoe zorg ik ervoor dat node_registrations stopt met het registreren van een gebruiker, wanneer mijn code dat wil?

[Voor 20% gewijzigd door Menesis op 04-05-2015 20:17]
Mixed Reality dev- HoloLens2, Magic Leap, Quest, Unity, Unreal Engine, 3ds max
De module `dblog` ga ik voor de komende 10 jaar vermijden, en Drupal misschien ook..
Ga tot de luiaard, gij mier! Zie haar wegen en wordt wijs.
Jouw fix werkt nu misschien, maar wees niet verbaasd als je straks op andere plekken fouten voorbij ziet komen vanwege ontbrekende severity values.
Ik ben blij dat het uberhaupt werkt op het moment.Mei schreef op vrijdag 08 mei 2015 @ 12:43:
[...]
Je moet de oorzaak van het probleem niet bij Drupal zoeken.
[...]
Jouw fix werkt nu misschien, maar wees niet verbaasd als je straks op andere plekken fouten voorbij ziet komen vanwege ontbrekende severity values.
Heeft watchdog/dblog geen default value wat betreft `severity`?
[Voor 8% gewijzigd door Amanush op 08-05-2015 12:46]
Ga tot de luiaard, gij mier! Zie haar wegen en wordt wijs.
Als ik jou was, zou ik je verandering ongedaan maken en de daadwerkelijke oorzaak zoeken. Als zoiets stoms als dit fout gaat, wil ik toch altijd graag weten welke code daarvoor verantwoordelijk is. Daarnaast blijf je met de huidige oplossing na elke upgrade core patchen.
Dank voor je advies!Mei schreef op vrijdag 08 mei 2015 @ 13:45:
[...]
Als ik jou was, zou ik je verandering ongedaan maken en de daadwerkelijke oorzaak zoeken. Als zoiets stoms als dit fout gaat, wil ik toch altijd graag weten welke code daarvoor verantwoordelijk is. Daarnaast blijf je met de huidige oplossing na elke upgrade core patchen.
Ga tot de luiaard, gij mier! Zie haar wegen en wordt wijs.
De plugin `Panopoly` is de verantwoordelijke.Mei schreef op vrijdag 08 mei 2015 @ 13:45:
[...]
Als ik jou was, zou ik je verandering ongedaan maken en de daadwerkelijke oorzaak zoeken. Als zoiets stoms als dit fout gaat, wil ik toch altijd graag weten welke code daarvoor verantwoordelijk is. Daarnaast blijf je met de huidige oplossing na elke upgrade core patchen.
Zijn er misschien mensen met soortgelijke ervaring(en) met `Panopoly`?
Ga tot de luiaard, gij mier! Zie haar wegen en wordt wijs.
Als je in die functie in dblog.module een backtrace uitvoert (dat kan met var_dump(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)) als je zelf geen debugger hebt draaien), dan kan je de fout herleiden naar de calling code en zo precies zien waar het fout gaat.
Ga tot de luiaard, gij mier! Zie haar wegen en wordt wijs.
via
1
| dpm(drupal_get_schema()); |
type (String, 3 characters ) int
$...['node_registration']['fields']['uid']['type']
Hoe krijg ik die te pakken? Ik denk dat ik een static querie meot uitvoeren oid?
Mixed Reality dev- HoloLens2, Magic Leap, Quest, Unity, Unreal Engine, 3ds max
NicePizzalucht schreef op dinsdag 12 mei 2015 @ 23:28:
Ow en even een schaamteloze plug voor mijn module: https://www.drupal.org/project/paragraphs

Helaas al een functie gemaakt met Field collection voor mijn site maar voor toekomstige projecten ga ik deze wel gebruiken.
Ja ik denk het maar ik heb geen idee hoe ik dat moet gebruiken (ben niet zo goed in programmeren..)Pizzalucht schreef op dinsdag 12 mei 2015 @ 23:19:
Ik snap je vraag niet helemaal, maar misschien kan je iets met db_select()?
Mixed Reality dev- HoloLens2, Magic Leap, Quest, Unity, Unreal Engine, 3ds max
Er staan heel wat voorbeelden op die pagina.Menesis schreef op woensdag 13 mei 2015 @ 17:16:
[...]
Ja ik denk het maar ik heb geen idee hoe ik dat moet gebruiken (ben niet zo goed in programmeren..)
Als je daar niet verder mee komt kan ik het wel uitleggen maar ik ben bang dat je al vrij snel weer vast komt te zitten.

M'n eerste module is een add on voor node registrations. Hij checkt of de user niet al is ingeschreven voor een event dat dezelfde taxonomy term heeft. Handig voor evenementen met meerdere workshops die elk meerdere tijdslots hebben, waarbij je je maar één keer voor een type workshop kunt inschrijven.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| <?php function limit_registrations_by_taxonomy_node_registration_access(){ //load current node $node = menu_get_object('node'); //load current taxonomy term $currentTaxId = $node->field_type_clinic['und']['0']['tid']; //get all the nodeid's that contain the taxonomy terms from the current page $nodesToCheck = taxonomy_select_nodes($currentTaxId,FALSE,FALSE); //loop over the taxonomy id's and check for registrations. Return FALSE if any registration is found. foreach ($nodesToCheck as &$value) { if(_node_registration_user_registered(node_load($value))){ dpm("al ingeschreven voor ".$value."!"); return FALSE; } } } |
-> Nog wel een vraagje want ik gebruik de hook niet helemaal goed.
Hook wordt zo gedefinieerd: function hook_node_registration_access($registration, $op, $account, $reason) {
Ik wil graag de var $reason opgeven om aan te geven waarom men zich niet kan inschrijven. Ik moet dan iets opgeven voor $registration, $op en $account

O.a. geprobeerd:* @param NodeRegistrationEntityClass $registration
* The relevant $registration, which might be new (so no registration_id) in case
* of operation 'add'/'create'.
* @param string $op
* The operation this access overrides. One of: delete, view, cancel, edit/update,
* add/create. The last two have aliases you must check for.
* @param stdClass $account
* The relevant user object that tries to do this $op to this $registration. Never
* empty;
* @param string $reason
* The reason the standard NR access was FALSE. Relevant for all operations. If the
* reason is unknown, this will be '?', so it's only empty IF access was granted
* by standard NR logic. This argument is useful if your code has expensive logic
* to disallow a certain operation: if $reason is not empty AND you're the only
* module overriding this access, your expensive code doesn't have to run.
1
2
3
| global $user; function limit_registrations_by_taxonomy_node_registration_access(NULL,"create",$user,"Al ingeschreven"){ |
[Voor 4% gewijzigd door Menesis op 14-05-2015 22:08]
Mixed Reality dev- HoloLens2, Magic Leap, Quest, Unity, Unreal Engine, 3ds max
Klopt je moet de params nog toevoegen aan je functie.Menesis schreef op donderdag 14 mei 2015 @ 21:51:
-> Nog wel een vraagje want ik gebruik de hook niet helemaal goed.
Hook wordt zo gedefinieerd: function hook_node_registration_access($registration, $op, $account, $reason) {
Ik wil graag de var $reason opgeven om aan te geven waarom men zich niet kan inschrijven. Ik moet dan iets opgeven voor $registration, $op en $accountIk weet alleen niet wat en krijg dat niet werkend...
[...]
1
| function limit_registrations_by_taxonomy_node_registration_access($registration, $op, $account, $reason){ |
1
| function limit_registrations_by_taxonomy_node_registration_access(NULL,"create",$user,"Al ingeschreven"){ |
Dit zal niet werken, uit deze functie verwacht hij alleen een true of false terug.
Met $reason kan alleen jij wat doen in je functie. Je kan de $reason niet teruggeven.
Niet een mooie oplossing maar misschien zou je dit eens kunnen proberen voor je return FALSE;
1
| drupal_set_message(t('Already registered for this event.'), 'error'); |
Ook hoef je
1
| $node = menu_get_object('node'); |
1
| $registration->node; |
[Voor 5% gewijzigd door Marc3l op 15-05-2015 09:17]

Die set_message had ik ook even erin staan, alleen komt die melding direct nadat je je aanmeld. Dat stond een beetje raar, want je krijgt eerst een info message dat je bent ingeschreven en daaronder één dat het niet kan omdat je al bent ingeschreven.
Misschien had ik het verkeerd gekopieerd van die $reason variabele.
In die module staat het zo:
1
| function node_registration_node_access($node, $op, $account = NULL, &$reason = NULL) |
Dat betekent dat ik die &$reason wel kan instellen toch? Ik begrijp alleen niet hoe


[Voor 35% gewijzigd door Menesis op 15-05-2015 17:38]
Mixed Reality dev- HoloLens2, Magic Leap, Quest, Unity, Unreal Engine, 3ds max
Executed 459 queries in 75.72 ms
459 klikt erg veel imho

Mixed Reality dev- HoloLens2, Magic Leap, Quest, Unity, Unreal Engine, 3ds max
Nee, die is voor de node. Jij moet die hebben uit de api (http://cgit.drupalcode.or...node_registration.api.php)Menesis schreef op vrijdag 15 mei 2015 @ 17:35:
thanks voor de feedback
Die set_message had ik ook even erin staan, alleen komt die melding direct nadat je je aanmeld. Dat stond een beetje raar, want je krijgt eerst een info message dat je bent ingeschreven en daaronder één dat het niet kan omdat je al bent ingeschreven.
Misschien had ik het verkeerd gekopieerd van die $reason variabele.
In die module staat het zo:
PHP:
1 function node_registration_node_access($node, $op, $account = NULL, &$reason = NULL)
Dat betekent dat ik die &$reason wel kan instellen toch? Ik begrijp alleen niet hoeIk heb niets om met die andere variabele te doen
Die params die je meekrijgt die geef je niet terug, je geeft alleen TRUE of FALSE terug.
Heb even een testje gedaan op een nieuwe standaard install met 1 node en daar view van gemaakt (basic page, zonder extra velden)Is dit veel voor een views pagina die een overzichtje weergeeft van ongv. 80 pagina's?
Executed 459 queries in 75.72 ms
Daar komt ' Executed 146 queries in 57.34 ms.' uit.
Ik wil graag een widget maken voor het "location" field (een field om je geolocatie op te slaan in lengte en breedetegraad).
Het widget moet de HTML5 geo api beter integreren. Ik heb vele modules geprobeerd maar geen een geeft de controle en "experience" die ik wil. Daarom wil ik een widget maken om de input gemakkelijker te maken.
Eerste stap:
- hoe vind ik de echt naam van een field? Ik heb nu dit, maar er verschijnt nog geen widget onder mijn content type met het location field.
function geofield_field_widget_info() {
return array(
'geofield' => array(
'label' => t('Location'),
'field types' => array('location'),
),
);
}
Mixed Reality dev- HoloLens2, Magic Leap, Quest, Unity, Unreal Engine, 3ds max
Met vanavond een gratis toegankelijke release party in Amsterdam: http://www.meetup.com/drupalnl/events/226585621/
Ik zit met het volgende. Voor een klein festival kunnen mensen zich inshrijven voor workshops via views en de signup module.
Probleem: het inschrijven opent op een bepaald tijdstip en 1000 man zitten dan continue te F5en (refreshen) om de eerste te zijn. Caching gaat geloof ik niet, want de site geeft aan hoeveel plekken er nog beschikbaar zijn, en als een workshop vol is moet deze niet meer opduiken, anders krijg je teleurgestelde mensen.
Vraag: Bestaat er een vorm van caching waarbij ingelogde gebruikers toch de nieuwste versie van een pagina te zien krijgen?
De site stond op shared hosting en ging dan kapot. Nu heb ik m via Cloudways op Digital Ocean gehost, maar weet nog niet zeker of dat het oplost.
[Voor 5% gewijzigd door Menesis op 31-01-2016 20:52]
Mixed Reality dev- HoloLens2, Magic Leap, Quest, Unity, Unreal Engine, 3ds max
Zit je wellicht alsnog met een race conditie als tijdens t invullen de laatste plekken vergeven zijn, maar om dat te fixen moet je al plekken op voorbehoud reserveren etc en kan je nog wel een jaar developen.

Iets meer aan hosting dokken helpt ook, 1000 man is ook niet meer zo eng als t geweest is.

{signature}
Niet helemaal waar, je zou dit voor een deel kunnen doen met https://www.drupal.org/project/Authcache en dan bepaalde stukken via ajax (of bigpipe zoals het hip genoemd wordt) in de pagina injecteren. Los van dat je dan geen cache tags hebt zoals Drupal 8 kun je wel het grootste van je niet gewijzigde content prima cachen.Mei schreef op zondag 31 januari 2016 @ 21:33:
Alleen Drupal 8 heeft slimme caching, dus op 7 is de enige optie om page caching uit te schakelen.
Ik gebruik dit op een site waar gebruikers achter een registratie muur zitten om bepaalde artikelen te mogen lezen, en het werkt na wat configuren zonder problemen uit den doos.
Driving a cadillac in a fool's parade.
Drupal.org natuurlijk. Of drupal.stackexchange.com. Daar krijg je soms sneller en beter antwoord.Menesis schreef op zondag 31 januari 2016 @ 20:51:
Het is hier vrij rustig.. Op welk forum zijn de meeste Drupalaars te vinden?
==
hoi

Het is me gister gelukt om m'n site persoonlijk te ddossen door simpelweg F5 voor een minuut ingedrukt te houden

op dit moment zijn de stats volgens devel: Executed 147 queries in 25.91 ms. Queries exceeding 5 ms are highlighted. Page execution time was 272.54 ms. Memory used at: devel_boot()=0.75 MB, devel_shutdown()=13.71 MB, PHP peak=15 MB.
Volgens mij is dat wel acceptabel?
Mixed Reality dev- HoloLens2, Magic Leap, Quest, Unity, Unreal Engine, 3ds max
Op zich nette cijfers! Wat is de totale rendertijd van PHP (dus niet alleen de queries).Menesis schreef op dinsdag 02 februari 2016 @ 21:19:
Toch wel een actief topicbedankt voor de antwoorden! Zelf de modules omschrijven naar iets met Ajax gaat hem niet worden denk ik, maar die Authcache ziet er wel goed uit!
Het is me gister gelukt om m'n site persoonlijk te ddossen door simpelweg F5 voor een minuut ingedrukt te houdenEn dat op een 1 core, 1GB hosting van digital ocean. Er is dus nog wat optimalisatie nodig voordat 1000 ingelogde users zich op hetzelfde tijdstip kunnen gaan inschrijven. Ik was aanvankelijk erg verbaasd dat shared hosting geen 1000 man aankon, maar Drupal is misschien toch wel wat zwaarder dan ik dacht.
op dit moment zijn de stats volgens devel: Executed 147 queries in 25.91 ms. Queries exceeding 5 ms are highlighted. Page execution time was 272.54 ms. Memory used at: devel_boot()=0.75 MB, devel_shutdown()=13.71 MB, PHP peak=15 MB.
Volgens mij is dat wel acceptabel?
En dat je je eigen site DoS'ed kan ook erg aan je configuratie van Apache/Nginx liggen, maar verwacht niet teveel van zo'n Digital Ocean bakje, zeker niet als je (bijna) niks kan cachen.
Query build time 23.13 ms
Query execute time 1.34 ms
View render time 67.7 ms
maar dat wordt wat meer naarmate er meer inschrijvingen zijn. Ik geloof dat we max op 450 queries zaten.
Is Digital Ocean niet zo krachtig? Ik doe het via Cloudways: had ik beter voor amazon of google kunnen kiezen? Daar krijg je een stuk minder voor je geld als je puur naar de specs kijkt. We hebben max 50€ per maand over voor hosting..
[Voor 10% gewijzigd door Menesis op 02-02-2016 21:46]
Mixed Reality dev- HoloLens2, Magic Leap, Quest, Unity, Unreal Engine, 3ds max
Kan je dan niet veel beter ergens een dedicated server ergens pakken? Krijg je sowieso meer waar voor je geld, moet je waarschijnlijk wel iets meer zelf configureren/doen.Menesis schreef op dinsdag 02 februari 2016 @ 21:46:
Ik weet niet hoe ik de totale rendertijd kan tonen, maar als ik de view los bekijk staat er:
Query build time 23.13 ms
Query execute time 1.34 ms
View render time 67.7 ms
maar dat wordt wat meer naarmate er meer inschrijvingen zijn. Ik geloof dat we max op 450 queries zaten.
Is Digital Ocean niet zo krachtig? Ik doe het via Cloudways: had ik beter voor amazon of google kunnen kiezen? Daar krijg je een stuk minder voor je geld als je puur naar de specs kijkt. We hebben max 50€ per maand over voor hosting..
Bijvoorbeeld: https://www.soyoustart.com/nl/essential-servers/ (als het niet uit maakt dat de server in Frankrijk staat)
Wat bedoel je precies met 1000 inschrijvingen/man tegelijk? 1000 req/s tegelijk, 1000 open sessies tegelijk (van hoeveel requests/s ga je dan uit)?
Wat is het precies het plan? Je kan het misschien wel op die DigitalOcean voor elkaar krijgen als je duidelijk hebt hoeveel requests je krijgt zodat je daarop kan benchmarken.
Met Digital Ocean kan je wel makkelijk schalen. Dus bijv. dag een groot pakket, daarna weer terug schalen.
En statische pagina's kan je iig goed cachen, evt met Boost.
- festival met 3000 bezoekers
- om een bepaald tijstip, zeg 12.00 uur gaat de site "open", vanaf dan kan men zich inschrijven voor workshops.
- van de 3000 bezoekers zijn er zo'n 500 fanatiekelingen die continue ziten te refreshen tot het 12.00 is. waarom? omdat er te weinig plekken zijn voor sommige workshops.
Om teleurstellingen te voorkomen denk ik dat de pagina toch wel elke 30 seconden globaal gerefreshed moet worden.
toen de site vorige keer vastliep ging men alleen maar vaker op F5 drukken dus dat was einde oefening totdat men afdroop (na een half uur). En toen had de webmaster het natuurlijk gedaan

Mixed Reality dev- HoloLens2, Magic Leap, Quest, Unity, Unreal Engine, 3ds max
Schalen met Digital Ocean is wel makkelijk, maar je moet je server wel uitzetten het kan best lang duren.Barryvdh schreef op dinsdag 02 februari 2016 @ 22:39:
1000 bezoekers tegelijk is best veel nog, als je niks optimaliseren.
Met Digital Ocean kan je wel makkelijk schalen. Dus bijv. dag een groot pakket, daarna weer terug schalen.
En statische pagina's kan je iig goed cachen, evt met Boost.
Tot 12 uur is het wel statisch dan toch? Dus dat kan je cachen.Menesis schreef op dinsdag 02 februari 2016 @ 22:39:
ik heb helaas geen harde cijfers, maar het scenario is als volgt:die fanatiekelingen zijn ingelogd en refreshen een page met ongeveer 400 queries. De pagina is dynamisch en verandert telkens als iemand zich inschrijft, maar de pagina is wel hetzelfde voor elke gebruiker.
- festival met 3000 bezoekers
- om een bepaald tijstip, zeg 12.00 uur gaat de site "open", vanaf dan kan men zich inschrijven voor workshops.
- van de 3000 bezoekers zijn er zo'n 500 fanatiekelingen die continue ziten te refreshen tot het 12.00 is. waarom? omdat er te weinig plekken zijn voor sommige workshops.
Om teleurstellingen te voorkomen denk ik dat de pagina toch wel elke 30 seconden globaal gerefreshed moet worden.
toen de site vorige keer vastliep ging men alleen maar vaker op F5 drukken dus dat was einde oefening totdat men afdroop (na een half uur). En toen had de webmaster het natuurlijk gedaan
Tja, laatste keer dat ik dat deed, duurde het minuut of 10. Maar als je dat snachts doet, is dat meestal niet zo'n probleem toch?Pizzalucht schreef op dinsdag 02 februari 2016 @ 22:40:
[...]
Schalen met Digital Ocean is wel makkelijk, maar je moet je server wel uitzetten het kan best lang duren.
Volgens mij heel erg afhankelijk van hoe groot je disk is. Bij mij heeft het ook wel eens langer dan een uur geduurd. Maar inderdaad, als je het 's nachts doet is het niet zo erg. Probeer alleen maar te zeggen dat de flexibiliteit wat mooier lijkt dan het is.Barryvdh schreef op dinsdag 02 februari 2016 @ 22:56:
[...]
Tot 12 uur is het wel statisch dan toch? Dus dat kan je cachen.
[...]
Tja, laatste keer dat ik dat deed, duurde het minuut of 10. Maar als je dat snachts doet, is dat meestal niet zo'n probleem toch?
Lees ik het nu goed, geen cache op die view? Als de resultaten soort van fixed zijn, zou je op zijn minst de query results kunnen cachen.Menesis schreef op dinsdag 02 februari 2016 @ 21:46:
Ik weet niet hoe ik de totale rendertijd kan tonen, maar als ik de view los bekijk staat er:
Query build time 23.13 ms
Query execute time 1.34 ms
View render time 67.7 ms
maar dat wordt wat meer naarmate er meer inschrijvingen zijn. Ik geloof dat we max op 450 queries zaten.
Is Digital Ocean niet zo krachtig? Ik doe het via Cloudways: had ik beter voor amazon of google kunnen kiezen? Daar krijg je een stuk minder voor je geld als je puur naar de specs kijkt. We hebben max 50€ per maand over voor hosting..
Rendered output cache ik meestal op pagina niveau voor anonieme gebruikers, het heeft volgens mij niet veel nut om de HTML output twee keer in je cache tabellen te zetten.
Wat ook redelijk veel kan schelen is je rendered cache naar memcached te verplaatsen, of als je het aan durft met de filecache module. Die slaat de cache serialized op in files, wat soms gunstiger kan zijn voor de grotere caches zoals pagina's (of als je simpelweg geen memcache/redis/apcu tot je beschikking hebt.
En last but not least, geen idee of je het aan kan passen maar mijn ervaring is dat Drupal net iets beter draait met php in FPM mode dan in mod_php onder apache 2.4.
Driving a cadillac in a fool's parade.
Maar op dat moment is het dus druk met inschrijvinen + wil hij up-to-date info tonen, dus kan je niet (lang) cachen. Al scheelt 1 minuut cachen natuurlijk wel als er veel mensen aan het F5'en zijn.kwaakvaak_v2 schreef op woensdag 03 februari 2016 @ 10:40:
[...]
Lees ik het nu goed, geen cache op die view? Als de resultaten soort van fixed zijn, zou je op zijn minst de query results kunnen cachen.
[afbeelding]
Rendered output cache ik meestal op pagina niveau voor anonieme gebruikers, het heeft volgens mij niet veel nut om de HTML output twee keer in je cache tabellen te zetten.
Wat ook redelijk veel kan schelen is je rendered cache naar memcached te verplaatsen, of als je het aan durft met de filecache module. Die slaat de cache serialized op in files, wat soms gunstiger kan zijn voor de grotere caches zoals pagina's (of als je simpelweg geen memcache/redis/apcu tot je beschikking hebt.
En last but not least, geen idee of je het aan kan passen maar mijn ervaring is dat Drupal net iets beter draait met php in FPM mode dan in mod_php onder apache 2.4.
Als je de overige pagina's met Boost statisch cached, doen die iig ook geen queries.
Voordeel van Fastly is dat het Varnish is, en je desnoods een block met het formulier via ESI kan laden
Driving a cadillac in a fool's parade.
https://drive.google.com/...YNmtMVXc/view?usp=sharing
Systeem: MSI Z170A Gaming / Intel i7-6700K @ 4.4 GHz / MSI GeForce GTX 1660 Super / G.Skill 32GB 2400 MHz / 2 x LG Ergo 32UN880 / Samsung 970 Evo Plus 500GB / Samsung 850 EVO 1TB
"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have star problems" --Kevlin Henney
In Views wil ik een filter maken voor dit aantal mensen, maar het field is niet als filter beschikbaar, maar wel onder "fields".
Hoe kan ik een filter in Views maken van een field dat niet als filter beschikbaar is?
Edit: misschien duidelijker met een screenshot:
Ik wil voor het field Available Slots een filter maken voor als het aantal 0 slots is.
[Voor 25% gewijzigd door Menesis op 20-05-2017 20:43]
Mixed Reality dev- HoloLens2, Magic Leap, Quest, Unity, Unreal Engine, 3ds max
Driving a cadillac in a fool's parade.
Dat veld komt helaas niet voor in die lijstkwaakvaak_v2 schreef op maandag 22 mei 2017 @ 10:43:
Dan voeg je toch het filter toe? Staat niet voor niets een knopje toevoegen naast Filter criteria?

Mixed Reality dev- HoloLens2, Magic Leap, Quest, Unity, Unreal Engine, 3ds max
Als het een veld is wat toegevoegd is door een contrib module, dan moet er wel ondersteuning voor views ingebouwd zijn/worden.
Ah ok, dat is het dus. Maar de "kogel is al door de kerk" en de site is online gegaan.mike.stijlloos schreef op vrijdag 26 mei 2017 @ 16:54:
Dan lijkt het me dat het veld type, filters niet ondersteund.
Als het een veld is wat toegevoegd is door een contrib module, dan moet er wel ondersteuning voor views ingebouwd zijn/worden.
Is BPU iets dat je met verschillende setup en sites kunt vergelijken?
Wat database stats:
Mixed Reality dev- HoloLens2, Magic Leap, Quest, Unity, Unreal Engine, 3ds max
zo niet dan kan je er zelf één maken, https://www.webomelette.c...tom-views-filter-drupal-8mike.stijlloos schreef op vrijdag 26 mei 2017 @ 16:54:
Dan lijkt het me dat het veld type, filters niet ondersteund.
Als het een veld is wat toegevoegd is door een contrib module, dan moet er wel ondersteuning voor views ingebouwd zijn/worden.
Dan heb je waarschijnlijk de verkeerde module gekozen. Je hebt Node Registration en Entity Registration. Entity Registration heeft zo te zien meer features en ze zeggen dat ze View filters ondersteunen.Menesis schreef op zaterdag 20 mei 2017 @ 20:41:
Ik heb een site die "node registrations" gebruikt met o.a. een field voor aantal ingeschreven mensen.
In Views wil ik een filter maken voor dit aantal mensen, maar het field is niet als filter beschikbaar, maar wel onder "fields".
Hoe kan ik een filter in Views maken van een field dat niet als filter beschikbaar is?
Edit: misschien duidelijker met een screenshot:
[afbeelding]
Ik wil voor het field Available Slots een filter maken voor als het aantal 0 slots is.
Ah ok. Hmm kan het nu niet meer veranderen want de site is in productie nu en ik heb ook een eigen module voor node registrations geschreven. Op zich is node registration best prima out of the box, maar het is hier en daar niet helemaal af zo lijkt het. En het wordt niet echt meer geupdate helaas.Zidane007nl schreef op vrijdag 26 mei 2017 @ 23:29:
[...]
Dan heb je waarschijnlijk de verkeerde module gekozen. Je hebt Node Registration en Entity Registration. Entity Registration heeft zo te zien meer features en ze zeggen dat ze View filters ondersteunen.
Voor volgens jaar eens naar entity registration kijken

Site draait nog op Drupal 7. Op zou denk ik wel een custom PHP filter kunnen maken om het veld als filter te kunnen gebruiken. Misschien volgend jaar naar Drupal 8 porten danMarc3l schreef op vrijdag 26 mei 2017 @ 18:59:
[...]
zo niet dan kan je er zelf één maken, https://www.webomelette.c...tom-views-filter-drupal-8

[Voor 20% gewijzigd door Menesis op 27-05-2017 11:14]
Mixed Reality dev- HoloLens2, Magic Leap, Quest, Unity, Unreal Engine, 3ds max

Met dank aan dit topic had ik een paar jaar (!) terug een kleine module geschreven. Deze checkt of mensen zich niet al hebben ingeschreven voor een workshop aan de hand van taxonomy terms.
Maar nu lijkt dat het een erg beetje module is als er veel (1000+) registraties zijn, want hij itereert over alle inschrijvingen.
Is het mogelijk om alleen taxonomy term van de inschrijvingen van de user te bekijken? Echter staat die term niet in de inschrijving denk ik, maar in de node die erbij hoort.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| <?php function limit_registrations_by_taxonomy_node_registration_access(){ if(isset($node->field_type_clinic['und']['0']['tid'])){ //load current taxonomy term $currentTaxId = $node->field_type_clinic['und']['0']['tid']; //get all the nodeid's that contain the taxonomy terms from the current page $nodesToCheck = taxonomy_select_nodes($currentTaxId,FALSE,FALSE); //loop over the taxonomy id's and check for registrations. Return FALSE if any registration is found. foreach ($nodesToCheck as &$value) { if(_node_registration_user_registered(node_load($value))){ //user should not be able to register return FALSE; } } } } |
Mixed Reality dev- HoloLens2, Magic Leap, Quest, Unity, Unreal Engine, 3ds max
Aangezien node_registration gebruikt maakt van entities zou je iets van een EntityFieldQuery kunnen gebruiken.Menesis schreef op woensdag 13 juni 2018 @ 20:20:
hmm, beetje dood topic![]()
Met dank aan dit topic had ik een paar jaar (!) terug een kleine module geschreven. Deze checkt of mensen zich niet al hebben ingeschreven voor een workshop aan de hand van taxonomy terms.
Maar nu lijkt dat het een erg beetje module is als er veel (1000+) registraties zijn, want hij itereert over alle inschrijvingen.
Is het mogelijk om alleen taxonomy term van de inschrijvingen van de user te bekijken? Echter staat die term niet in de inschrijving denk ik, maar in de node die erbij hoort.
code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 <?php function limit_registrations_by_taxonomy_node_registration_access(){ if(isset($node->field_type_clinic['und']['0']['tid'])){ //load current taxonomy term $currentTaxId = $node->field_type_clinic['und']['0']['tid']; //get all the nodeid's that contain the taxonomy terms from the current page $nodesToCheck = taxonomy_select_nodes($currentTaxId,FALSE,FALSE); //loop over the taxonomy id's and check for registrations. Return FALSE if any registration is found. foreach ($nodesToCheck as &$value) { if(_node_registration_user_registered(node_load($value))){ //user should not be able to register return FALSE; } } } }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| <?php function limit_registrations_by_taxonomy_node_registration_access(){ if(isset($node->field_type_clinic['und']['0']['tid'])){ //load current taxonomy term $currentTaxId = $node->field_type_clinic['und']['0']['tid']; //get all the nodeid's that contain the taxonomy terms from the current page $nodesToCheck = taxonomy_select_nodes($currentTaxId,FALSE,FALSE); global $user; $query = new EntityFieldQuery(); $query->entityCondition('entity_type', 'node_registration') ->propertyCondition('uid', $user->uid) ->propertyCondition('nid', $nodesToCheck, 'IN') ->propertyCondition('cancelled', 0); $result = $query->execute(); if (isset($result['node_registration']) && count($result['node_registration']) > 0) { // User should not be able to register. return FALSE; } } } |
Let op: niet getest
Ik zoek een oplossing voor de volgende uitdaging:
Op een nieuwe Drupal 8 website wil ik een multi step formulier tonen, waarmee ik uiteindelijk op één contentpagina kom (een specifieke node), afhankelijk van wat ik heb gekozen in het formulier. Dus bijvoorbeeld:
Stap 1: kies een land (taxonomy term)
Stap 2: kies filter 2 (taxonomy term)
Stap 3: kies filter 3 (taxonomy term)
Stap 4: toon content (afhankelijk van gekozen filters)
De mogelijke oplossingen die ik in mijn hoofd had:
- Webforms met multi step formulier. Uitdaging: hoe toon ik een node op de laatste stap afhankelijk van de gekozen opties in de eerste stappen.
- Views met exposed filters. Uitdaging: hoe krijg ik de exposed filters verdeelt over meerdere pagina's.
- Compleet custom code, hoewel ik dit natuurlijk liever wil voorkomen.
Bij oplossing 2 loop ik vast op het multistep maken van de exposed filters van de view. Ik heb ook nog geen modules gevonden die daarbij kunnen helpen.
Er zijn natuurlijk altijd meerdere manieren om iets op te lossen binnen Drupal, maar ik zoek natuurlijk de meest logische. Ik had ook al zitten kijken of ik de submit URL van oplossing 1 via de GET methode naar een specifieke link te posten. Bijvoorbeeld naar /view/filter1/filter2/filter3/. En deze weer op te laten vangen door een view. Maar ook hier loop ik vast op het omzetten van de gekozen opties/filters naar een specifieke submit URL.
Heeft iemand hier wel eens een soortgelijke uitdaging opgelost of … tips / inspiratie?