Categorieën
JavaScript jQuery PHP WordPress

WordPress menu met geluid

Onlangs kreeg ik de vraag hoe je een geluidsfragment kunt afspelen zodra je over een WordPress menu item heen gaat met je muis. Op internet is veel informatie te vinden over hoe je een geluidsfragment kunt afspelen, maar hoe integreer je deze netjes in een WordPress thema? In dit bericht beschrijf ik kort een mogelijk oplossing.

Allereerst is het handig om een map ‘audio’ aan te maken binnen je WordPress thema map. Binnen deze map kun je alle gerelateerde audio bestanden plaatsen die je wilt afspelen zodra men met de muis over een menu item gaat. Vervolgens voegen we aan het WordPress functions.php bestand een aantal functies toe:

/**
 * Menu audio
 *
 * @return array
 */
function prefix_menu_audio() {
	$dir = get_stylesheet_directory_uri();

	return array(
		'beep' => array($dir . '/audio/beep.mp3', $dir . '/audio/beep.ogg') ,
		'end' => array($dir . '/audio/end.mp3', $dir . '/audio/end.ogg')
	);
}

In bovenstaand code fragment worden 2 audio fragmenten gedefinieerd in 2 verschillende formaten, namelijk MP3 en OGG. Om deze audio fragmenten te kunnen afspelen moeten ze worden toegevoegd aan de HTML van de website. Dit kunnen we realiseren met behulp van de volgende functie:

/**
 * Menu beep HTML
 */
function prefix_menu_audio_html() {
	$html = '';

	$audio = prefix_menu_audio();

	foreach($audio as $id => $sources) {
		$html .= sprintf('<audio id="%s">', esc_attr($id));
		foreach($sources as $source) {
			$html .= sprintf('<source src="%s" />', esc_attr($source));
		}
		$html .= '</audio>';
	}

	echo $html;
}

add_action('wp_footer', 'prefix_menu_audio_html');

Met behulp van bovenstaande functie wordt er voor gezorgd dat de gedefinieerde audio fragmenten in een nette HTML5 formaat in de footer van de WordPress website worden geplaatst. Vervolgens kunnen we met behulp van een aantal regels code JavaScript / jQuery deze audio fragmenten afspelen. Om dit te realiseren maken we maken een JavaScript bestand menu-audio.js aan in de WordPress thema map.

jQuery(document).ready(function($) {
	$(".menu a").mouseenter(function() {
		$("#beep").trigger("play");
	});
});

Dit bestand kan met behulp van de volgende functie worden toegevoegd aan de WordPress website zodat deze wordt uitgevoerd:

/**
 * Menu beeps enqueue scripts
 */
function prefix_enqueue_scripts_menu_audio() {
	wp_enqueue_script(
		'menu-audio' ,
		get_stylesheet_directory_uri() . '/menu-audio.js' ,
		array('jquery')
	);
}

add_action('wp_enqueue_scripts', 'prefix_enqueue_scripts_menu_audio');

In dit voorbeeld wordt slecht 1 audio fragment afgespeeld voor alle menu items. Met een beetje WordPress en jQuery kennis is dit natuurlijk eenvoudig uit te breiden.

Update: Voor het gemak heb ik een kant en klare WordPress menu audio oplossing klaar gezet, welke uitgepakt kan worden in je thema map en geactiveerd kan worden door include 'menu-audio/menu-audio.php'; in je thema’s functions.php bestand te plaatsen.

Categorieën
E-commerce PHP WooCommerce WordPress

WordPress Google Conversion shortcode

Om Google Conversion doelen bij te houden moet je soms op bepaalde pagina’s een zogenaamde Google Conversion code plaatsen. Binnen WordPress installatie kan het toevoegen van dergelijke codes soms lastig zijn. Daarom heb ik een eenvoudig WordPress shortcode gemaakt waarmee je eenvoudig een Google Conversion code kunt toevoegen aan je WordPress pagina’s.

/**
 * Google Conversion Code
 */
function prefix_shortcode_google_conversion_code($atts) {
	extract(shortcode_atts(array(
		'id' => null , 
		'language' => 'en' , 
		'format' => 3 , 
		'color' => '666666' , 
		'label' => '' , 
		'value' => 0 , 
	), $atts));

	$crlf = "\r\n";

	$noScriptImageUrl = sprintf('http://www.googleadservices.com/pagead/conversion/%d/', $id);
	$noScriptImageUrl = add_query_arg(array(
		'label' => $label , 
		'guid' => 'ON' , 
		'script' => 0
	), $noScriptImageUrl);

	$output = '';

	$output .= '<!-- Google Code for Bezoekers Pagina Douchegoten Remarketing List -->' . $crlf;
	$output .= '<script type="text/javascript">' . $crlf;
	$output .= '/* <![CDATA[ */' . $crlf;
	$output .= sprintf('var google_conversion_id = %d;', $id) . $crlf;
	$output .= sprintf('var google_conversion_language = "%s";', $language) . $crlf;
	$output .= sprintf('var google_conversion_format = "%s";', $format) . $crlf;
	$output .= sprintf('var google_conversion_color = "%s";', $color) . $crlf;
	$output .= sprintf('var google_conversion_label = "%s";', $label) . $crlf;
	$output .= sprintf('var google_conversion_value = %d;', $value) . $crlf;
	$output .= '/* ]]> */' . $crlf;
	$output .= '</script>' . $crlf;

	$output .= '<script type="text/javascript" src="http://www.googleadservices.com/pagead/conversion.js">' . $crlf;
	$output .= '</script>' . $crlf;

	$output .= '<noscript>' . $crlf;
	$output .= '<div style="display:inline;">' . $crlf;
	$output .= sprintf('<img height="1" width="1" style="border-style:none;" alt="" src="%s"/>', esc_attr($noScriptImageUrl)) . $crlf;
	$output .= '</div>' . $crlf;
	$output .= '</noscript>' . $crlf;

	return $output;
}

add_shortcode('google_conversion_code', 'prefix_shortcode_google_conversion_code');

Deze shortcode is met name interessant zijn in combinatie met WordPress webwinkel plugins zoals WooCommerce of Jigoshop. Om de shortcode ook op de product categorieën te kunnen gebruiken zullen de shortcodes ook toegepast moeten worden op de product categorieën beschrijvingen.

/**
 * Add shortcode support to term description
 */
function prefix_term_description($description) {
	if(is_archive()) {
		$description = do_shortcode($description);
	}

	return $description;
}

add_filter('term_description', 'prefix_term_description');
Categorieën
API PHP

Beveiligd: Windfinder API

De inhoud is beveiligd met een wachtwoord. Vul het wachtwoord hieronder in om hem te kunnen bekijken:

Categorieën
PHP WordPress

Hoe werkt het WordPress update systeem?

WordPress is uitgerust met een zeer eenvoudig en krachtig update systeem. Dankzij dit systeem kunnen WordPress gebruikers eenvoudig WordPress, plugins en thema’s eenvoudig updaten. Ik als ontwikkelaar was erg benieuwd naar deze opzet van dit systeem. Ik ben daarom de WordPress code ingedoken om de werking van dit systeem te onderzoeken.

Het WordPress update systeem maakt gebruik van een API die op WordPress.org staat. Dankzij deze API is eenvoudig informatie op te vragen over WordPress, plugins en thema’s. Elke WordPress installatie informeert om de 12 uren of er updates beschikbaar zijn via de WordPress.org API. De WordPress.org API kun je benaderen via de volgende URL: http://api.wordpress.org/

Als je de WordPress broncode doorzoekt op deze URL zul je een tiental bestanden vinden waarin hier gebruik van gemaakt wordt. In het bestand wp-includes\update.php is te zien op welke wijze WordPress controleert of er nieuwe versies zijn van WordPress, plugins of thema’s. Ik zal hieronder met enkele code fragmenten laten zien hoe gecontroleerd wordt of er thema update beschikbaar is.

WordPress zal in eerste instantie informatie over de geïnstalleerde WordPress thema’s opvragen met behulp van de get_themes() functie. Vervolgens zal deze informatie met behulp van HTTP POST verzoek worden verstuurd naar de WordPress.org API. Hiervoor wordt gebruik gemaakt van de wp_remote_post() functie die onderdeel is van de WordPress HTTP API. De WordPress.org API zal vervolgens aangeven of er updates beschikbaar zijn voor de geïnstalleerde thema’s.

In onderstaande code fragment is globaal te zien hoe een dergelijk verzoek wordt opgebouwd en uitgevoerd:

$themes = array(
	'twentyten' => array(
		'Name' => 'Twenty Ten' ,
		'Version' => '1.0'
	) ,
	'platform' => array(
		'Name' => 'Platform' ,
		'Version' => '1.0'
	) ,
	'delicate' => array(
		'Name' => 'Delicate' ,
		'Version' => '1.0'
	)
);

$args = array(
	'body' => array('themes' => serialize($themes))
);

$response = wp_remote_post('http://api.wordpress.org/themes/update-check/1.0/', $args);

if(is_wp_error($response)) {
	exit('Sorry, something went wrong.');
}

if(200 != $response['response']['code']) {
	exit('Sorry, something went wrong.');
}

$result = unserialize($response['body']);

Als alles goed gaat dan zal de variabele $result informatie over thema’s bevatten waar updates voor beschikbaar zijn. Hieronder zie je een voorbeeld dump van de $result variabele:

array(3) {
	["twentyten"]=>
	array(3) {
		["new_version"]=>
		string(3) "1.1"
		["url"]=>
		string(44) "http://wordpress.org/extend/themes/twentyten"
		["package"]=>
		string(61) "http://wordpress.org/extend/themes/download/twentyten.1.1.zip"
	}
	["platform"]=>
	array(3) {
		["new_version"]=>
		string(5) "1.3.1"
		["url"]=>
		string(43) "http://wordpress.org/extend/themes/platform"
		["package"]=>
		string(62) "http://wordpress.org/extend/themes/download/platform.1.3.1.zip"
	}
	["delicate"]=>
	array(3) {
		["new_version"]=>
		string(5) "3.4.3"
		["url"]=>
		string(43) "http://wordpress.org/extend/themes/delicate"
		["package"]=>
		string(62) "http://wordpress.org/extend/themes/download/delicate.3.4.3.zip"
	}
}

De WordPress.org API geeft dus aan welke versie nu beschikbaar is en waar deze te vinden is. WordPress zal vervolgens met behulp van de Transient API het updaten van de thema’s kenbaar maken aan de WordPress beheerders. De beheerder krijgen daardoor een melding te zien dat er updates beschikbaar zijn. Zodra de beheerder de update uitvoert zal de package URL gedownload worden en de thema bestanden vervangen worden. Hiervoor gebruikt WordPress onder andere de  Theme_Upgrader PHP klasse.

Categorieën
PHP WordPress

WordPress zoeken sorteren op relevantie en datum

De standaard zoekfunctie van WordPress is erg eenvoudig en beperkt. De zoekresultaten zijn standaard gesorteerd op datum. Het is niet mogelijk om deze te sorteren op bijvoorbeeld relevantie. Daarnaast is het ook niet mogelijk om fancy operators te gebruiken in je zoekopdracht zoals we gewend zijn bij andere zoekmachines. Gelukkig zijn er allerlei plugins die de zoekfunctie van WordPress uitbreid.

Ik wilde op een WordPress website de bezoekers de mogelijkheid geven om te sorteren op relevantie of op datum. Om dit mogelijk te maken heb ik ik de Relevanssi plugin van Mikko Saari (twitter: @msaari) geïnstalleerd en de volgende code toegevoegd aan de search.php template.

<?php 

$url = add_query_arg('s', get_search_query(), home_url('/'));

printf(
	__('ordered by %s | %s', 'text_domain') ,
	sprintf('<a href="%s">%s</a>',
		add_query_arg('orderby', 'relevance', $url) ,
		__('relevance', 'text_domain')
	) ,
	sprintf('<a href="%s">%s</a>',
		add_query_arg('orderby', 'post_date', $url) ,
		__('date', 'text_domain')
	)
);

?>
Categorieën
PHP WordPress

WordPress berichten inclusief bijlagen verwijderen

In mijn vorige blog kon je lezen hoe je WordPress berichten kunt verwijderen die geen gekoppelde media (attachments) hebben. In dit bericht laat ik een code snippet zien waarmee je berichten inclusief gekoppelde bijlagen kunt verwijderen. Als je een bericht binnen de WordPress beheerpaneel verwijderd blijven de gekoppelde bijlagen staan. Als je ook de gekoppelde bestanden wilt verwijderen kun je gebruik maken van de volgende code:

$query = new \WP_Query();
$query->query(array(
	'post_type' => 'project' ,
	'tax_query' => array(
		array(
			'taxonomy' => 'phase' ,
			'field' => 'slug' ,
			'terms' => 'test'
		)
	) ,
	'posts_per_page' => -1
));

while($query->have_posts()) {
	$query->the_post();

	$postId = get_the_ID();

	echo $postId, ' - ', get_the_title(), '<br />';

	$attachmentsQuery = new \WP_Query();
	$attachmentsQuery->query(array(
		'post_type' => 'attachment' ,
		'post_status' => 'inherit' ,
		'post_parent' => $postId
	));

	while($attachmentsQuery->have_posts()) {
		$attachmentsQuery->the_post();

		$attachmentId = get_the_ID();

		echo '- ', $attachmentId, ' - ', get_the_title(), '<br />'; 

		$result = wp_delete_attachment($attachmentId, true);
	}

	$result = wp_delete_post($postId, true);
}

Je kunt uiteraard de WP_Query->query() parameters helemaal naar wens aanpassen.

Categorieën
PHP WordPress

Verwijder WordPress berichten zonder bijlagen

Bij Pronamic zetten we regelmatig websites om naar WordPress. We maken hierbij gebruik van verschillende importeer technieken. Helaas gaat er bij het importeren ook wel eens iets fout. Zo gebeurd het soms dat de bijlagen bij een bericht niet goed worden overgenomen. We moeten dan alle berichten zonder gekoppelde bijlagen verwijderen. Binnen het beheerpaneel van WordPress is dit niet eenvoudig te realiseren. Daarom hebben we een simpel scriptje ontwikkeld waarmee we deze berichten kunnen verwijderen.

$query = new WP_Query();
$query->query(array(
	'post_type' => 'post' ,
	'posts_per_page' => -1
));

while($query->have_posts()) {
	$query->the_post();

	$id = get_the_ID();

	$attachmentsQuery = new \WP_Query();
	$attachmentsQuery->query(array(
		'post_type' => 'attachment' ,
		'post_status' => 'inherit' ,
		'post_parent' => $id ,
		'posts_per_page' => -1
	));

	if($attachmentsQuery->post_count == 0) {
		wp_delete_post($id, true);
	}
}
Categorieën
PHP Twinfield

Twinfield usability en API

Sinds een jaar gebruiken we bij Pronamic het online boekhoudsysteem Twinfield. Met dit pakket zou je eenvoudig online je administratie moeten kunnen beheren. In dit bericht zet ik daar mijn vraagtekens bij, is Twinfield wel zo eenvoudig en gebruiksvriendelijk?

Ik moet hierbij vermelden dat ik erg weinig doe met Twinfield. Ik gebruik Twinfield voornamelijk voor het opvragen van facturen en het controleren van betalingen. Toch zie ik enorm veel verbeterpunten bij deze eenvoudige handelingen. In dit bericht kort een aantal verbeterpunten.

Inloggen

Om in Twinfield in te loggen moet je naar de pagina https://login.twinfield.com/ surfen. Ik ken deze URL in principe uit mijn hoofd, maar ik type hem zelden met ‘https’ ervoor. Als je echter naar http://login.twinfield.com/ surft krijg je de melding: “De wachttijd voor de verbinding is verstreken“. Zou het zo lastig zijn om http://login.twinfield.com/ netjes door te linken naar https://login.twinfield.com/?

Zodra je uiteindelijk het inlogformulier voor je hebt begint de voglende uitdaging. Je moet een gebruikersnaam, wachtwoord en een omgeving invoeren. De gebruikersnaam en wachtwoord zijn erg gebruikelijk, maar waar dient ‘omgeving’ voor? Het zal vast een doel hebben binnen Twinfield, maar ik vind het een onnodig extra veld.

Deze problemen zijn in principe eenvoudig te verhelpen door de login URL en de logingegevens op te slaan binnen je webbrowser. De ontwikkelaars van Twinfield zouden dit echter ook kunnen vereenvoudigen. Met de kreet “Snel starten en overal toegankelijk” op hun website zou je dat wel mogen verwachten, want snel Twinfield starten is mij nog niet gelukt ;).

Navigeren

Als ik vervolgens ben ingelogd en een factuur wil bekijken klik ik in het hoofdmenu op het item “Facturatie”. Ik krijg zodra ik met mijn muis over dit item ga keurig een ‘pointer’ cursor te zien. Door de ‘pointer’ cursor krijg ik het idee dat dit item linkt naar een pagina “Facturatie”, maar dit blijkt niet zo te zijn.

Zodra ik op dit item klik opent er niet een nieuwe pagina, maar sluit het zojuist automatische geopende submenu. Dit terwijl het submenu de enige manier is om naar een pagina te navigeren is.

Als je veel met Twinfield werkt zul je wel snel gewend zijn aan het feit dat hoofdmenu items niet bruikbaar zijn. Voor de gebruikers die minder regelmatig met Twinfield werken is dat toch minder gebruiksvriendelijk.

Bladeren

Waar ik me nog het meeste over verbaas is dat je binnen Twinfield niet direct vanuit het hoofdmenu lijsten met gegevens kunt opvragen. Vanuit veel webapplicaties ben ik gewend dat zodra je op een hoofd menu item klikt je direct door gegevens heen kunt bladeren. Zo kun je in WordPress in het hoofdmenu klikken op “Berichten” en krijg je direct de meest recente berichten te zien:

Waarom kan ik binnen Twinfield niet via het hoofdmenu een overzicht met crediteuren, debiteuren, facturen, bankafschriften, etc. tevoorschijn toveren? Data opvragen binnen Twinfield moet blijkbaar beslist via allerlei onhandige zoekformulieren. Zo moet ik voor het bekijken van de laatst verzonden facturen naar “Opvragen” onder het menu item “Facturatie” gaan en vervolgens het volgende formulier invullen:

Als ze nou eens onder het hoofdmenu item “Facturatie” meteen de meest recente facturen weergeven zou me dat enorm veel tijd besparen. Hetzelfde geldt ook voor allerlei andere objecten zoals crediteuren en debiteuren. Eenvoudig een overzicht naar voren halen en daardoor heen bladeren zit er bij Twinfield naar mijn idee niet in.

Permalinks

Permalinks zijn denk ik de basis van elke goede webapplicatie. Alle data binnen een webapplicatie moet naar mijn idee bereikbaar zijn onder een unieke permanente link. Gelukkig beseffen veel ontwikkelaars wereldwijd dit en is data steeds vaker terug te vinden onder een unieke permanente link.

Bij Pronamic werken we met allerlei webapplicaties. Je kunt daarbij denken aan de webapplicaties van 37signals (Basecamp, Highrise, etc.) en het Pronamic intranet met alle klant- en projectdata. Alle data binnen deze webapplicaties zijn via een unieke URL op te vragen. Ik merk dat we deze URL’s intern steeds vaker gebruiken, zo linken we in e-mails, chats en andere applicaties naar gerelateerde data.

Helaas is data binnen Twinfield nog lang niet altijd goed onder een unieke permanente link beschikbaar. Dit terwijl ik juist regelmatig naar administratieve data in Twinfield wil linken. Zo zou ik bij vragen over data binnen Twinfield een collega kunnen mailen met een link naar de betreffende data.

Conclusie

Ik denk dat Twinfield qua usability nog flink aan de weg moeten werken. Administratief gezien zullen bepaalde dingen vast en zeker handig opgezet zijn. Voor iemand die echt eenvoudig en snel zijn administratie wil doen lijkt Twinfield mij minder handig. Ik denk dat voor mensen zoals mij hippen en moderne webapplicaties zoals MoneyBird veel fijner werken.

Gelukkig heeft Twinfield ook een API beschikbaar gesteld. Het is dus mogelijk om Twinfield data via een eigen applicatie op te vragen en gebruiksvriendelijker weer te geven. Ik heb op Google Code: https://code.google.com/p/twinfield/ wat meer informatie over deze API gepubliceerd. Naast dat heb ik ook een aantal experimentele PHP 5.3+ classes ontwikkeld waarmee bepaalde Twinfield data is op te vragen.

Dummy code

<?php

namespace Pronamic\Twinfield;

$twinfieldClient = new TwinfieldClient();

// Inloggen
$result = $twinfieldClient->logon($username, $password, $organisation);

// Kantoren opvragen
$offices = $twinfieldClient->getOffices();

// Zoeken
$finder = $twinfieldClient->getFinder();

$search = new Search();
$search->setType(Search::TYPE_DIMENSION);
$search->setPattern('*');
$search->setField(Search::FIELD_ALL_CODE_OR_NAME);
$search->setFirstRow(1);
$search->setMaxRows(Search::ROWS_ALL);

?>

Ik wil dit te zijner tijd verder gaan ontwikkelen en het opvragen van bepaalde data in Twinfield vereenvoudigen. Wellicht zijn er vervolgens ook mogelijkheden om andere PHP applicaties te koppelen aan Twinfield. Zo is er volgens mij veel interesse in een stabiele Magento Twinfield koppeling.

Categorieën
PHP WordPress

WordPress media bestanden met rare tekens

Onlangs hebben we een nieuwe WordPress website gelanceerd bij Pronamic. De opdrachtgever heeft deze website netjes gevuld op de ontwikkel- en testomgeving van Pronamic. Vervolgens hebben we deze verplaatst naar de productieomgeving. Hierbij liepen we echter tegen een probleem aan. Veel geüploade bestanden hadden in de bestandsnaam rare tekens, zoals copyright (©) tekens. Op de ontwikkel- en testomgeving leverde dit geen problemen op, maar helaas op de productieomgeving wel.

Aangezien het om een flink aantal bestanden ging was het handmatig aanpassen of opnieuw uploaden niet een optie. Ik kon helaas ook geen geschikte WordPress plugin vinden die dit probleem kon verhelpen. Om die reden heb ik zelf maar even een oplossing ontwikkeld. Allereerst heb ik een MySQL query bedacht die alles © tekens vervangt met een gewone c teken.

UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, '©', 'c') WHERE meta_key = '_wp_attached_file';
UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, '©', 'c') WHERE meta_key = '_wp_attachment_metadata';
UPDATE wp_posts SET guid = REPLACE(guid, '©', 'c') WHERE post_type = 'attachment';

Vervolgens moesten de bestanden in de WordPress uploads mag ook gewijzigd worden. Hiervoor heb ik eenvoudig PHP script geschreven en uitgevoerd in de uploads map:

<?php

$rdi = new RecursiveDirectoryIterator('./');
$rii = new RecursiveIteratorIterator($rdi);

foreach($rii as $file) {
	$name = $file->getPathname();

	$copyrightPosition = strpos($name, '©');

	if($copyrightPosition !== false) {
		$newName = str_replace('©', 'c', $name);

		$renamed = rename($name, $newName);

		echo $name, ' = ', $newName, ' = ', ($renamed ? 'renamed' : 'failed'), '<br />';
	}
}

Uiteindelijk heb ik voor de zekerheid alle afbeelding en bijbehorende thumbnails opnieuw laten generen met de Regenerate Thumbnails plugin. Mocht je ook ooit een dergelijke probleem hebben dan hoop ik dat je met bovenstaande code fragmenten dit snel kunt oplossen. Eventueel kan Pronamic ook een plugin voor je ontwikkelen die geautomatiseerd je probleem kan verhelpen. Mocht je nog vragen, opmerkingen en/of tips hebben laat dan gerust een reactie achter.

Categorieën
Magento PHP

Magento factuurdatum toevoegen aan PDF

Bij Pronamic krijgen we regelmatig de vraag om de factuurdatum toe te voegen aan de Magento factuur PDF. Volgens de belastingdienst moet de factuurdatum immers verplicht op de factuur staan. Op internet zijn gelukkig genoeg pagina’s te vinden waarop wordt uitgelegd hoe je dit voor elkaar kunt krijgen.

Als je de factuurdatum achter het factuurnummer wilt plaatsen in de PDF kun je daarvoor de volgende code gebruiken.

$page->drawText(Mage::helper('sales')->__('Invoice Date') . ': ' . Mage::helper('core')->formatDate($invoice->getCreatedAt(), 'full', false), 285, 780, 'UTF-8');

Deze regel kun je toevoegen aan het bestand ‘app/code/local/Mage/Sales/Model/Order/Pdf’ onder de regel:

$page->drawText(Mage::helper('sales')->__('Invoice # ') . $invoice->getIncrementId(), 35, 780, 'UTF-8');

De datum kan in verschillende formaten worden weergegeven in de PDF. Hier voor wordt gebruik gemaakt van de ‘formatDate’ functie. Binnen de 2e parameter kun je opgeven in welk formaat de datum weergegeven moet worden. Je kunt hiervoor kiezen uit de volgende PHP class constanten uit de Mage_Core_Model_Locale class:

  • Mage_Core_Model_Locale::FORMAT_TYPE_FULL = ‘full’
  • Mage_Core_Model_Locale::FORMAT_TYPE_LONG = ‘long’
  • Mage_Core_Model_Locale::FORMAT_TYPE_MEDIUM = ‘medium’
  • Mage_Core_Model_Locale::FORMAT_TYPE_SHORT = ‘short’

Als je werkt met de Nederlandse Magento dan kun je de volgende output verwachten:

  • ‘full’ = maandag 31 januari 2011
  • ‘long’ = 31 januari 2011
  • ‘medium’ = 31 jan. 2011
  • ‘short’ = 31-01-11

Met de 3e parameter kun je overigens opgeven of je de tijd ook wilt weergeven. Als je hier false opgeeft zal de tijd niet worden weergeven, bij true wel.