Umbraco SurfaceController – Navigatie

Op dit moment werk ik veel met Umbraco. Ik houd om diverse redenen van dit CMS  (denk aan flexibiliteit, de mogelijkheid tot hard-core programmeren, goede klantervaring, prachtige community). Een onderdeel waar ik niet 100% gecharmeerd van ben is het gedeelte macro’s. Hoewel macro’s (ik gebruik vooral MVC Razor macro’s) op verschillende fronten fantastisch zijn, hebben ze last van het feit dat ze vrij snel resulteren in overgecompliceerde stukken code met een erg ongezonde mix van html en C# code.

Eén van deze overgecompliceerde macro’s is in mijn situatie de menu macro. Met het porteren van de SurfaceController vanuit Umbraco 5 naar Umbraco 4.10 (en verder) heb ik dan ook meteen besloten dat ik mijn menu en kruimelpad macro’s om zou bouwen naar een nieuwe navigatie surface controller (genoemd, hoe verrassend, NavigationSurfaceController).

In deze blog post wil ik delen van de surface controller uitlichten. Klein probleem: ik heb er momenteel geen tijd voor ;) .

In de tussentijd, als je simpelweg op zoek bent naar de code van deze surface controller, voel je dan vrij om de broncode zip te downloaden. Verwacht geen werkende Visual Studio solution, maar kopieer de bestanden uit de zip even in je eigen solution (Umbraco uitbreidings-dll of zelfs in het hoofdproject) en start met genieten ;) . Feedback is van harte welkom!

Veel plezier met coderen!

Asynchroon JQuery laden met yepnope – bijna, maar valkuilen

Vandaag ben ik tegen een probleem aangelopen dat ik niet (helemaal) heb kunnen oplossen. Ik wil graag onderstaande code gebruiken om asynchroon JQuery in te laden (met behulp van yepnope).

<script src="/scripts/modernizr-2.6.2.min.js" type="text/javascript"></script>
<script src="/scripts/yepnope.1.5.4-min.js" type="text/javascript"></script>
<script type="text/javascript">
	var docready = [], $ = function () { return { ready: function (fn) { docready.push(fn); } }; };
	yepnope({
		load: '//ajax.googleapis<em><strong>OFFLINE</strong></em>.com/ajax/libs/jquery/1.8.2/jquery.min.js',
		complete: function () {
			if (!window.jQuery) {
				yepnope({ load: '/scripts/jquery-1.8.2.min.js', complete: initJQuery });
			} else {
				initJQuery();
			}
		}
	});

	function initJQuery() {
		$ = window.jQuery;
		for (var index in docready) $(document).ready(docready[index]);
	}
</script>

De code werkt bijna helemaal.

De code werkt bijna perfect. De JQuery bibliotheek wordt geladen vanuit de Google CDN, zoals gevraagd, en wanneer die niet beschikbaar is, valt het script terug naar het laden van het lokale script. Terwijl de jQuery bibliotheek is nog niet geladen, zet ik alle $(document).ready() calls in de wacht om ze alsnog uit te voeren wanneer jQuery volledig is geladen. Dit werkt! Maar ik ontdekte dat JQuery plugins niet werken met deze code, omdat ze het jQuery of $ object nodig hebben.

Ik weet dat ik de initJQuery functie zou moeten gebruiken voor het laden van JQuery gebaseerde plugins omdat ik gebruik wil maken van asynchroon laden. Helaas kan dit niet, omdat sommige plugins ingevoegd worden door bij ASP.NET partial views of m.b.v. Rejuicer. Op dit moment blijf ik werken met de synchroon geladen jQuery plugin (zo laat mogelijk) en vang ik nog steeds de $(document).ready() calls op voor latere (gegarandeerde) uitvoering. Ik ben wel benieuwd naar jullie oplossingen ;) .

PS. Ow, op dit moment, het stukje code dat ik op dit moment gebruik is:

// in head:
<script type="text/javascript">var docready = [], $ = function () { return { ready: function(fn) { docready.push(fn); } }; };</script>

// just before </body> tag:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">window.jQuery || document.write('<script src="/scripts/jquery-1.8.2.min.js" type="text/javascript"><\/script>')</script>
<script type="text/javascript">
    // fire all preliminary $(document).ready(fn) calls immediately after jquery is loaded.
    $ = jQuery;
    for (n in docready) $(document).ready(docready[n]);
</script>

Zelfsluitende iframe tag zorgt voor falende Javascript uitvoering

Voor een project waaraan ik momenteel werk, moet ik een iframe te gebruiken. Sinds ik de iframe in mijn web applicatie heb opgenomen, is de JavaScript code eronder meteen gestopt met werken. Ik heb het probleem eerst niet gezien en heb pas na veel zoeken ontdekt dat de iframe het probleem veroorzaakt. Ik gebruikte een zelfsluitende iframe tag. De oplossing voor het probleem was om een ​​afsluitende iframe tag te gebruiken in plaats van een zelfsluitende iframe… Dit is een eenvoudige oplossing, ik neem aan dat meer mensen met dit probleem zullen worden geconfronteerd – hopelijk kan ik jullie hiermee helpen ;) .

Website www.villatropezienne.com live!

De afgelopen tijd heb ik in mijn vrije tijd een meertalige Umbraco website gebouwd voor een vriend van me die eigenaar is van een prachtige villa in Frankrijk. Op dit moment is de inhoud van de website nog niet vollegid, maar de nieuwe website is al wel te bewonderen op www.villatropezienne.com.

Als je een mening hebt over de website, laat ‘t dan maar weten ;) !

Website overzetten naar Azure met Git resulteert in fout 501? De oplossing…

Op dit moment ben ik aan het spelen met de nieuwe Windows Azure Web Sites optie. Hoewel de gratis versie momenteel geen host name ondersteuning biedt (wat in de toekomst wel komt volgens Scott Guthrie), is het toch een plezier om mee te werken. Momenteel werk ik aan een kleine website, gemaakt met behulp van WordPress. De ontwikkelversie wordt momenteel gehost in Azure (dankzij deze handleiding: https://www.windowsazure.com/en-us/develop/php/tutorials/website-w-mysql-and-git/).

Bij het overzetten van mijn PHP website naar Windows Azure met Git (git push azure master), liep ik aan tegen een foutmelding.

Er stond iets over ‘refs not being implemented’. Ik weet nog steeds niet wat er precies mis was, maar uitvoeren van het commando git pull azure master bleek de gouden truc. Het resultaat van deze operatie? Already up-to-date (zoals verwacht). Na de pull operatie kon ik succesvol het commando git push azure master call uitvoeren…

Veel codeerplezier!