Mugo Web main content.

In-depth insights on content, code, and creativity

Generate highly customized PDFs with wkhtmltopdf and eZ Publish

One of our customer websites sells research reports where all of the content is built and managed in the eZ Publish content management system. These reports are served via HTML through a gated website portal. They wanted to add a dynamic PDF report generation feature (based on content in the CMS); the PDF template was highly customized with nice layouts and styles, cover and back pages, custom page breaks, and much more. Over the years we've had good experiences with the ParadoxPDF extension. However due to its lack of HTML5 + CSS3 support and relatively high server load, we decided to look for an alternative solution. We found that wkhtmltopdf does a great job at producing highly styled PDFs, and we were able to integrate it nicely with eZ Publish.

LEARN MORE

Custom fatal error message for eZ Publish (legacy)

Until some time ago, it was necessary to hack the eZ Publish legacy kernel in order to customize its generic error message, "Fatal error: The web server did not finish its request". This error occurs on all eZ Publish installations whenever there is an HTTP 500 status server error. It is a very common error; some examples of how it's triggered include: trying to access the value of a non-existent object attribute; the use of a non-existent PHP class or function; and too much memory usage.

Now, since this pull request from Mugo has been merged to the eZ Publish kernel, we have made it possible to customize the error page without hacking the kernel. In this post I will show you the new standard way to do this with a simple INI setting and your own PHP function.

LEARN MORE

Mugo Web and Royal Columbian Hospital modernize emergency department shift evaluations

Mugo Web and the Royal Columbian Hospital / Eagle Ridge Hospital emergency departments have created an online shift evaluation system now in use in 5 emergency departments across the region. The system is called Online Daily Evaluations and is being used at Royal Columbian Hospital, Eagle Ridge Hospital, Vancouver General Hospital, Victoria General Hospital, and Kelowna General Hospital.

LEARN MORE

Tracking individual users in Google Analytics

Google Analytics is the most popular tool for understanding how people are finding and using your site. In addition to its standard reports, you can use its User ID feature to get more fine-grained reporting about registered users. This enables you to better measure, anticipate, and meet or exceed your users' needs.

LEARN MORE

JavaScript and CSS in eZ Publish 5

A key component of a content management system or web application is the handling of JavaScript and CSS files, specifically around loading, combining, and minifying them. Loading fewer files and a smaller amount of data in each file leads to both server-side and client-side performance improvements. In eZ Publish 4 / legacy, this was handled nicely with an extension called ezjscore. Now in the eZ Publish 5 new stack, we have a Symfony tool called Assetic. In this post we'll introduce how Assetic works in eZ Publish 5.0 through 5.4.

LEARN MORE

Content auto-linking for better SEO and increased conversions

Links are one of the core elements of the web. Links within body content are not only good for user experience, but also for SEO, engagement, and conversion. As we read, for example, a sports article, there might be links on the athlete names pointing to their biography pages. Or, when reading an author's bibliography, the book titles contained therein might be linked to the book pages. Adding and maintaining such in-body links can be very time-consuming; systems that auto-link the text can be a great help for content publishers.

LEARN MORE

Saved searches and e-mail alerts in eZ Publish

A powerful addition a normal site search is for registered users to be able to save their searches, share the searches with others, and create customized e-mail alerts. This adds a deeper level of interactivity with the site and encourages users to regularly return to the site.

LEARN MORE

"Sort by language" filter in eZ Publish

Multi-language sites often have a set of base rules and then edge cases for different parts of the site. For example, on the French version of the site you might only want to show French content on most pages. For the news section, you might want to show press release results from all languages sorted in reverse chronological order, regardless of language. But for the case study section specifically, you might want to show all French versions first, following by case studies in any other language. For the most part, eZ Publish supports these features out of the box. In this post, we'll show you how to extend eZ Publish to sort results by language.

LEARN MORE

Building employee training quizzes with eZ Publish

We recently added "quiz" functionality to eZ Publish by extending the eZ Survey extension. The purpose of this functionality is to enable companies to create "on-boarding" quizzes for new hires to learn about company policies and benefits.  This was part of a larger intranet implementation.

LEARN MORE

Subscription-based sites: softer / combination paywall solution

On subscription-based websites, digital publishers often restrict the majority of content to registered users and/or paid subscribers. However, publishers still need a way to enable non-registered users to sample the website in order for the visitors to more fully understand the benefits to subscribing. This is sometimes called a "softer" or "combination" paywall as opposed to a fully hard paywall (everything protected) or a "porous" paywall (everything available given the right conditions).

One solution for a softer / combination paywall that Mugo recently implemented uses special "hash" URLs to provide time-limited, full access to select articles.

LEARN MORE

Reading object states in eZ Publish 5

Object states are used in many ways in eZ Publish, from workflows to menu management to controlling SEO tags. In eZ Publish 5, object state information is not available by default as one of the intrinsic attributes of a content or location object. In this post, we will show you how to access object states in PHP (usually in your custom controllers) or in Twig templates.

LEARN MORE

New features in eZ Tags: tag reordering and tree menu

The eZ Tags extension by Netgen is a great solution to the problems of managing large or ad hoc taxonomies. It especially solves problems around editorial user experience. 

Recently, Mugo has added a bunch of improvements to the extension. This post talks about 2: allowing users to reorder tags by assigning priorities, and to select tags from a tree menu.

LEARN MORE

Enterprise login features in eZ Publish: sub-accounts, log in by IP address or referring URL

If you have a membership-based website, the standard model is to provide users access via a username and password. Enterprise customers often require more advanced validation models. Here, we sketch out use cases around validating by IP address or referring URL; and as a bonus topic: multi-seat accounts. We've implemented these advanced features for a couple of sites and they work seamlessly.

LEARN MORE

Salesforce and Marketo integration with eZ Publish

eZ Publish is a powerful Content Management System (CMS), but you typically don't try to build Customer Relationship Management (CRM) and E-mail Marketing features directly into it.  Instead, you usually integrate it with existing solutions. We recently integrated eZ Publish with Salesforce and Marketo on a subscription-based website.

LEARN MORE

eZ Publish workflows: multi-language, collaboration, and scheduled publishing

Mugo's eZ Collaboration Workflow extension has been released for a few years now. We've been able to make continuous improvements over time to solve different and more complex client needs. Here's an update on some of the recent new functionality around multi-language workflows, editing other users' drafts, and scheduled publishing.

LEARN MORE

ezurl() links in eZ Publish 5

In eZ Publish 4 / legacy, formatting link URLs is handled by the well-known ezurl() template operator. This is especially useful when you have multiple siteaccesses and you use URL-based matching. In eZ Publish 5, there is no single ezurl() equivalent; instead, there are several options depending on the type of link you want to display.

LEARN MORE

Varnish caching of non-sensitive content for logged-in users

Varnish is great for high traffic sites where the same pages are served over and over to millions of visitors, but when you have to do something differently depending on the specific user or user group, things get complicated. There are several techniques, and how you might use them depends on the details. Here, we have outlined a solution for a particular use case on eZ Publish.

LEARN MORE

Adding data to the eZ Find index with Index Time Plugins

Index time plugins are one of the most important techniques of extending eZ Find functionality; they allow you to control how and what data is indexed. Combined with custom eZ Find queries, this opens up huge opportunities for providing access to content, well beyond mere 'search'.

In this post we will look at some typical use cases, briefly consider out of the box functionality and then dive into why you would want to make use of index time plugins and how you would go about setting one up.

LEARN MORE

Version history limit in eZ Publish 5

Whenever you edit content in the eZ Publish Administration Interface, eZ Publish stores a new version. eZ Publish has a built-in feature to limit the number of previous versions it stores. However, as of the time of this posting, the eZ Publish 5.x public API to create and update content does not respect the version history limit (which, by default, stores 10 previous versions). We've written a quick function that restores this feature.

LEARN MORE

An introduction to fetching content in eZ Publish 4 and eZ Publish 5

Fetching content the new way on eZ Publish 5.x.

In the following article we are going to show you how to fetch information in the new eZ Publish version considering that permissions may be set in place on different sections and we will compare it to how is it done in the legacy kernel.

During the flow of this article we will introduce a new undocumented method which is going to let us bypass permissions set to different sections.

LEARN MORE

Using VirtualBox to install and test eZ Publish 5

Using virtual machines when developing eZ Publish websites have been useful in 2 main ways (if not more): working in a different server environment than your current machine and standardizing the dev environment for a team of developers. At the moment, I have Ubuntu 13.10 installed as my main operating system, and from time to time I need to work with some older eZ Publish versions that require PHP versions older than Ubuntu 13.10's default; in fact, the oldest eZ Publish version that I can run out of the box on Ubuntu 13.10 is eZ Publish 4.7. I don't like the idea of installing another OS just to work with an older eZ Publish version; that requires creating another partition, configuring grub, and so on. Using virtual machines enables me to work within another OS inside my main OS. That way I can work on a standardized environment specific to each client, while continuing to use my favorite base OS and tools. In this tutorial, I will describe how to install and configure Oracle VirtualBox to create virtual machines that run eZ Publish.

LEARN MORE

Rackspace Performance Cloud benchmarking on eZ Publish

Rackspace recently released their newest generation of cloud servers, called Performance Cloud Servers. Unlike previous new releases, they've made a compelling case to upgrade existing cloud servers, as the "Performance Cloud" servers are cheaper, more powerful, and they use SSD storage. We decided to run some performance tests on an existing eZ Publish site, and saw between a 10-100% performance increase under high loads. 

LEARN MORE

SMS services still deserve attention despite the rise of smart phone apps

Countless presentations are made daily about the ubiquity of smart phones and the new, groundbreaking uses of smart phone apps. However, in many cases, humble text message services can be more useful and efficient.

LEARN MORE

Integrating Disqus comments onto an eZ Publish website

Disqus is one of the most popular third-party commenting tools that can be integrated onto your website. There are a few special considerations when implementing Disqus onto a website where an article might have multiple locations and/or the article's URL might change. In this post, we'll walk you through a basic but robust implementation within an eZ Publish site.

LEARN MORE