In-depth insights on content, code, and creativity
When using eZ Publish's eZ Find extension on a public facing site or project -- arguably any project -- it is vital to secure it to prevent unauthorized access and potential data loss. eZ Find is powered by Apache Solr, an open-source search server based on the Lucene Java search library. Its power and flexibility make eZ Find a great tool when working with a lot of content in eZ Publish.
There are a number of ways a Solr installation can be secured. We'll look at BasicAuth via Jetty UserRealms and iptables firewall rules in detail.
Vagrant and Ansible are tools to efficiently provision virtual machines (also called VMs or simply boxes).
This blog post will begin with a short discussion of why one would invest the time to use these tools, then cover the required software, an overview of how Vagrant works with VirtualBox and the use of Ansible to provision a VM.
Using HubSpot together with Salesforce, you can tie your inbound marketing campaigns to your customer and lead records for a nearly complete view of every user interaction with your business. (Add some analytics and you're all set!) However, with so much data syncing going back and forth, you must take care not to go over your storage and API call limits in Salesforce. Surprisingly, data overage charges are not cheap, and if you use up your API call limits, not only will your data stop syncing between HubSpot and Salesforce, but other systems -- such as your website -- will not be able to access and update important data.
In order to increase the image serving performance of high-traffic websites and improve the editorial user interface around image management, Mugo Web came up with an alternative way to serve content images in eZ Publish. It is aptly titled the "Mugo Image Server for eZ Publish".
eZ Publish 5 comes with built-in Varnish Cache support. Essentially this means that when content is published in the eZ Publish back-end, it notifies Varnish so that the Varnish cache is cleared. This feature is often called "purge-on-publish" and makes it so that you can cache your pages for a very long time, but that edits refresh the cache and thus appear immediately. To get this native support, you just have to use the "new stack" in eZ Publish. However, even if your legacy site is not ready to be fully upgraded to the new stack and you are running eZ Publish 5 in "legacy mode", you can take advantage of this native support.
Some time ago I wrote a blog post about integrating Salesforce and Marketo in a web marketing solution powered by a content management system (in this case, the eZ Publish CMS). Recently, Mugo had the opportunity to migrate one of our clients from Marketo to HubSpot. The decision to move to HubSpot was made for non-technical reasons; regardless, it is useful to review the technical differences and challenges when it comes to integrating the marketing systems with a content management system.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.