Feeds

Author

Upgrade Your Drupal Skills

We trained 1,000+ Drupal Developers over the last decade.

See Advanced Courses NAH, I know Enough
Apr 26 2022
Apr 26

In Annertech's Technical SEO Service for Drupal Websites, we talked about what we do during a technical SEO implementation. But let us now look at the longer-term benefits of implementing one for your organisation.

1. Increase Reach Across all Channels

When your content is created in such a way as to allow Google, Bing and others to easily discover it, index it, and display it, it stands to reason that more people will also find it. With this increase in reach across different channels, you have the inevitable increase in potential sales and engagement.

2. Increase Search Engine Ranking

Following-on from the last point, if Google can easily understand your content, it stands a much better chance of appearing higher in search results, up to and including “Position Zero”. This means not just being at the top of general search results, but also featuring within the "People also ask" and "Featured snippets" section. Being placed here is Google gold dust.

3. Rich Snippets in Search Results

When your content appears in search results, you want more than a title with a short description; you want images, video, ratings, call to actions, etc. Anything that makes the search result showing your website more enticing than your competitors is a real bonus. Remember, a more enticing or prominent result will mean more engagement.

Nov 25 2021
Nov 25

Advantages of decoupled websites

1. They’re secure

When we create a decoupled website the storage of the data and the servers are in one place and the actual website is somewhere else. For example, my personal website is hosted on Github Pages but the CMS is behind a firewall, somewhere where nobody else can get to it. There’s no database, no server, and no forms that might make it hackable. And that right there is a very enticing proposition for local councils: to have a very secure website.

Another benefit of this can be seen when it comes to updates. For example, when there is a security update for Drupal there is a rush to get applied (because it is open source anyone can see the source code at all times).

When it comes to a decoupled site, since the Drupal backend is stored off-site and locked away and not available on the open internet you can take your time about doing your updates. The updates definitely need to be applied, but the urgency is removed.

2. They’re fast

Aside from the security, there’s the idea of speed. Performance is one of Google’s metrics for search engine ranking, and one of Google's core web vitals metrics is the user's experience when loading a webpage.

These metrics include how quickly a page loads, how quickly a browser can respond to a user's input, and how unstable the content is as it loads in the browser. As an SEO metric, having a fast website is as important as having good content.

Decoupled sites are fast because they do not interact with the database and do not gather all the parts of a page before putting the page together for you. Rather, they deliver the whole page, fully-formed, in one go.

3. Scalable solution for microsites and campaign sites

Decoupled sites are a good choice for local governments because many councils have a large number of websites. For example, in addition to a main council website there might be numerous small microsites for events such as a Christmas campaign, a local food fair or a St Patrick's Day festival.

Each microsite has its own hosting platform, database and developers who maintain it. The costs start to snowball when it comes to this many sites. If there’s a security update for a CMS then multiple different websites need to be updated and tested – and when it comes to a council website there could be 30 or 40 different websites that need to be updated.

Within a decoupled situation, we'd suggest just one CMS – so when there's an update, only one platform needs to be updated; when there's a new feature request, it needs to be applied to only one site.

This simplifies things beautifully. Decoupling would mean that all the council’s content could be stored in one place, so content editors just need to get used to use one system. They could, for example, create the news for all the different websites on one website and then tag that news as, say "Christmas" or "food festival". After that, the decoupling system will pull those content items into the individual websites.

The situation can be tailored to specific needs. The main council website could be decoupled – lighting fast, un-hackable and future-proofed. And then additional microsites could be added as they’re needed.

Microsites can retain the branding of the main site or they can have a completely independent look and feel. But the idea is that all content is stored and managed in one place.

It should homogenise your content and make it much easier to keep track of it. So as we've said, it means content designers and editors only need to learn one system, and if they want to update any system – a website, an app, a microsite, etc – they just have to log in to the one shared CMS.

4. Costs and time

Many councils prefer to pay for one website rather than for 50 websites. A decoupled site allows for this.

For example, when working with the Irish Centre for High-End Computing we created a system in which all microsites are created in the current Drupal CMS, but not displayed there. To create a microsite, it's a matter of simply tagging each post or page with the name of that microsite. There can be as many microsites as needed, either following a set design or with a custom design.

If ICHEC wants a new microsite for, say, Science Week 2022 and Science Week 2023 and so on, this can happen with very little development time. We’ve built a system where the content creators can create all the news posts and the home page by adding a category on the website called Science Week 2022 and tagging each page they want to appear in the microsite with this.

It will take us an hour or two to get the infrastructure set up for each website with the website live straightaway, rather than taking us a number of weeks to build a new website.

5. Redesigns and migrations

Redesigns and migrations are a double-edged sword. You have to do them, and things usually look and run better once they’re done. But they take time and cost money.

When it comes to a decoupled site, because the backend and frontend are decoupled from each other either of them can be updated at leisure without affecting the other part.

So let’s say someone wants move their website from Wordpress to Drupal. They can afford a new look for the website but can’t afford to update the whole database and migrate all the content to a new system.

We can redo the decoupled frontend – and it would look brilliant – and then in a year’s time when they have the budget to update the backend we can get on the backend and the frontend remains the same. There can be different stages of development, so they can move at the pace they want.

Please see the video below that I presented at DrupalCon Amsterdam on GatsbyJS and decoupled websites.

Oct 20 2021
Oct 20

What are the benefits of LocalGov Drupal?

1. Low cost

With no licence fees to pay, and being free and open source, LocalGov Drupal means you can have a best-in-class, enterprise-grade website for your council at a fraction of the price of a licenced, proprietary website. And remember, you’ll pay that licence before a line of code is written to develop the website to your brand guidelines. Meaning, with LocalGov Drupal, budget is freed up to spend on other services for the homeless, health, education, etc.

2. Rigorously tested

Since LocalGov Drupal is a collaboration between a number of councils and development agencies, it’s well-tested before any new feature is released. More, you have the reassurance of knowing that each feature has an automated test suite alongside it, developed by some of the best Drupal developers in the world.

As well as that, you can see for yourself websites built on the codebase – Brighton-Hove, Cumbria, Bracknell Forest, Croydon, and many more. And being open source, you can have your in-house developers download it and validate the codebase.

3. WCAG 2.1 AA compliant

LocalGov Drupal is built with accessibility at the core. Each feature is tested from a number of accessibility standpoints and WCAG 2.1 AA criteria. We want to ensure everyone can use our websites fully, whether they have accessibility requirements or not.

4. Faster development time

As the features you need for your council website are already built and ready to go, development turnaround time is much faster. Typically, creating a new council website can often take up to a year. However, LocalGov Drupal websites are typically launched in only 8 to 12 weeks.

And, with a shared feature set, the development budget is mostly used creating the look and feel of your website (called “frontend development” – fonts, colours, spacing, etc). Given Annertech were tasked with writing the base frontend system for the platform, who better to implement it on your council website.

5. No vendor lock-in

As an open-source product, there is no vendor lock-in with LocalGov Drupal. You do not need to sign up for a licence for any period of time. If you want to take your website and have another development agency work on it, you are free to do so. You own the codebase at all times. All you’ll need is another Drupal specialist.

6. Share features

Collaborating with others means we learn from one another. Through LocalGov Drupal you have access to people who have solved a problem you’re currently experiencing.  

What if you want a feature that isn’t available yet? Simply send a proposal to the product working group. If your proposal is accepted (i.e., it’s a feature lots of councils will use), we will work on it. If it is not accepted (perhaps it’s very specific to your council), you are free to work on it yourself and maintain it for just your website. Also, you could  share it with the smaller number of councils that will need that feature.

Nov 23 2020
Nov 23

4. Track team

This year's DrupalCon will feature well-over 100 sessions, across five tracks, and also four deep dive workshops that are not to be missed (for the first time, these workshops are included in the price of your ticket).

For a number of years, Annertech has provided volunteers to chair tracks. This involves many meetings about the conference to decide what the tracks will be, answering questions from those who wish to speak before sessions are submitted, reviewing and rating sessions after they are submitted (hundreds get submitted, so this is no small task), awarding speaking slots, and ensuring speakers are taken care of during the conference.

Our Director of Projects, Mike King, has been a track chair for many years, including chairing the Agency & Business track this year. In previous years, Mark Conroy, our Director of Development, has chaired the Frontend and Site Building tracks, while Stella has chaired numerous tracks from Agency & Business to Higher Education.

Jun 03 2020
Jun 03

Every new version of Drupal has had the headache of the upgrade path - from 5 to 6, from 6 to 7, from 7 to 8. What this often meant was re-building the site in the new version and then doing a migration of the content. This was expensive for clients. With Drupal 9 (and the versions that will follow), this is now a thing of the past.

Drupal 9 is the exact same codebase as the last version of Drupal 8, with just two changes:

  • Updates of dependencies to versions that stay supported
  • Removal of our custom Drupal code that has been marked as deprecated

This means, if your site was running on Drupal 8, and your developers kept it updated to the latest version of Drupal 8, you just need to make sure that any contributed modules and custom code are not using deprecated functions. If that's the case, hey presto - you're website is Drupal 9 ready. I don't think we can underscore how good a feature this is strongly enough.

New Features

But surely there are some new features? No, not in this release - and that's good for now. For Drupal 9, we have the same feature set from Drupal 8. Drupal 8 introduced the idea of new features in each minor version (8.1, 8.2, etc) rather than having to wait for the next major version (Drupal 9). This means Drupal, during the 8.x lifecycle, got lots of new features - media in core, umami magazine profile (for which I am a core maintainer), layout builder, JSONAPI, and more. For Drupal 9.0, there are no new features, though that will change from 9.1. Once we get over this first release, expect new features again every 6 months.

Sep 10 2018
Sep 10

As ever, we have brought our bags of knowledge with us to share out our goodies. On Tuesday, Mark Conroy will co-present on the new installation profile and theme for Drupal core - Umami. This is part of the "Out of the Box" initiative of which Mark is co-maintainer. Mark will be accompanied by two other leads from that initiative - Eliot Ward and Keith Jay. Later on Tuesday, the three will co-host a BoF to set the parameters for what they want to achieve during the weeks' code sprints.

Also on Tuesday, Stella Power will co-present a session on Drupal governance. Maybe you already heard about the Governance Task Force. This is a chartered group that was formed to make a proposal on community governance in Drupal. The session will share what the task force is doing, how to get involved, and the current progress of the Task Force.

Not to be outdone, David Thorne will - again on Tuesday (we've a busy Tuesday!) - give a presentation on the Islandora CLAW distribution for Drupal. This talk will introduce CLAW's key concepts to educational establishments, many of whom may already use Drupal for websites, as well as Fedora Commons for their digital asset collections.

Wednesday is the day we'll all relax after our presentations on Tuesday, and look forward towards Thursday where we'll host the usual (pretty crazy) Drupal Trivia Night Quiz, along with an army of volunteer runners, judges, and the ever-dapper host - Anthony Lindsay.

On Friday, we'll crack open the laptops and contribute as much code as we possibly can to the Drupal project, before flying home Friday night and Saturday morning.

Oh, and - we're hiring!

Oct 31 2017
Oct 31

To achieve the first, we had a strict policy on "no case studies, no sales pitches". Instead we specifically asked for people to propose talks about migration, multilingual, headless Drupal, test driven development, component-based theming, etc. Naturally, the Drupal community didn't let us down and provided two days of very high-level sessions on these and more topics. (As an aside, one attendee told me he didn't get to DrupalCon, but did manage to get to four DrupalCon sessions at Drupal Camp Dublin.)

To achieve the second, we deliberately scheduled our camp for 2 months after DrupalCon. This would allow us to talk to people at DrupalCon and encourage them to come along. Added to that, we contacted people we knew from other Drupal communities outside of Ireland and asked them if they would like to come to our camp and to promote a tweet or two for us. This was a successful endeavour with about 33% of attendees at Drupal Camp Dublin coming from overseas, mostly the UK and Belgium.

So, what was talked about? We'll here's a lightning talk blogpost of each topic (yes, I managed to get to every session across two tracks, except for one session that was on the same time as one of my own).

Lessons Learned from Building a Large Multilingual, Multi-region Site in Drupal 8

This was a shortened version of Stella's talk from DrupalCon. A fascinating look at the quirks of building a website with localised content, rather than just multilingual content. For example, showing a blog post to users in Europe, but not to users in Asia; an English language report in US English for the US audience and UK English for the rest of the world. There are more pitfalls than you might think, but Stella covered them all.

Surviving your job when having ADD

Levi Govaerts gave a wonderful talk on how having ADD affects his life and work and strategies for coping. I tweeted to him later to say I'd love to see such a talk given to a larger audience, such as a DrupalCon audience. I hope this happens. Very insightful.

Lean Web Operations — Planning for the unpredictable

This was a talk from Jochen from FreistilBox. As usual, Jochen delivered a very engaging talk on "getting things done" with his typical humour and deep knowledge. In short - stop starting and start finishing.

A Headed Goal for SSE Airtricity League with Headless Drupal!

This talk wasn't so much a headless goal as it was a triple header. There was so much to get through here it took three very capable developers from Monsoon Consulting to deliver it, the talk focussed on building a Drupal backend for a headless Angular JS frontend for the Football Association of Ireland.

Clearing out the cruft - Using Migrate API to migrate a 12 year old site

Alan, from Annertech, has been maintaining the Athenry running club website for a long time, starting with Drupal 4.7. Each new major release of Drupal allows Alan to see what has changed about Drupal migration from version to version. In this talk he looked at the workflow needed and how to migrate from media in Drupal 7 to Media Entity Embed in Drupal 8 as well as migrating to paragraphs.

Estimates are dead, long live forecasting!

I apologise for turning this well-prepared talk into a discussion. But I couldn't stop asking inline questions because what Mike King was talking about had such a resonance for how developers work. Basically, we need to use data to let our clients know our 'forecast' of work completion. We cannot estimate with any accuracy.

One-click automated builds

Luis Rodriguez from Capgemini gave this talk on making your development workflow easier by automating as much as possible. I wish I knew as much as Luis about this kind of stuff.

Case study : making Commerce, Webform & Group play nicely together

Okay, we said strictly no case studies, but this one was worth it. Chandeep Khosa gave a great overview of how he has used webform and Drupal commerce along with the group module to allow quite complex pricing rules to deliver products to clients.

Live Performance Workshop: A top-to-bottom performance overhaul

Anthony Lindsay, from Annertech, shocked us all with some terribly bad code that would make a site very slow (the type of code we have seen and fixed for some of our clients). After we got over the shock, we set about fixing it, together, as a team with everyone giving whatever knowledge we had until we got the site from a 5 minute page load to a 2 second  page load.

Deploying Drupal (and anything else) with Fabric

This was the first  of Oliver Davies's talks, in which he demoed some very clever things he has been doing with Fabric to help his deployment workflow.

Back to the Future: No More Static Mockups!

Without doubt the best talk of the weekend, not just because it was by me! This was a version of the talk I gave at DrupalCon, where I go on my usual rant about why we need to stop sending clients photoshop mockups of their websites and start using PatternLab (or at least design in the browser).

Teaching Development via Drupal

I missed this talk because I was giving mine at the same time. From comments from people who were at it, I'm sorry I missed it. Apparently a great talk along the lines of "I am teaching CMS developer at a third level institute. What should I be teaching about Drupal".

There's more to code reviews than you might think

This was a great introduction from Daniel Shaw about how to get started with code reviews, why code reviews are not supposed to be scary, and how they can make your developers even better developers.

Drupal 8 Sitebuilding with Paragraphs, Display Suite & Configuration Management

Chandeep's second session. This time he gave a preview of how he uses paragraphs and display suite to allow him to deliver complex requirements without writing code, and also give the editor as good a user experience as possible.

TDD - Test Driven Drupal

This was Oliver Davies' second session. in this one, he expounded on why we should write tests, how to get started writing them, and - crucially - why using TDD can help you work faster and find bugs sooner.

A foundation in Drupal development with Docker

This was one of those sessions where I know very little about the topic but like to attend so I can at least gain some vocabulary about it. Ed Crompton didn't disappoint, and now at  least I know the difference between a Docker image and a container.

Growing an Agency Business: Tactics Vs Strategy

Bharat Sharma from Monsoon Consulting stepped in to give this talk when another speaker had to cancel. In it he dissected the process his company went through a few years back to re-shape themselves and the type of client they wanted to work with. There was a lot to take away from this talk for any company looking to scale.

A New Theme for Drupal Core?

I gave this presentation as the last one of the weekend. It was a short and simple overview of the work we are doing as the 'Out of the Box"' initiative for Drupal Core - building a demo installation profile for an imaginary food publishing magazine called Umami, which will become part of Drupal Core 8.5.x (if we meet our deadlines).

And that was it. Drupal Camp Dublin 2017 - in my opinion the best Drupal Camp we have had so far in Ireland.

Sep 19 2017
Sep 19

I got a request today from a former colleague:

@marky I need some quick practical selling points why our designers should stop using dedicated design programs and design in the browser instead. 2 or 3 should do!

I guess he had to add in the "2 or 3 should do" knowing I'd go off on a long rant. In either case, I gave him 5, here they are:

1) Don't Build Up Expectations for Your Client

When you use a static tool such as Photoshop, you build up expectations for your client. What usually happens is that all titles are the same length, all images have the same crop proportions, etc. But when your client adds real content, the rendered page looks like an approximation of the design.

With design in the browser, what you show to your client is what your client will get.

2) Quicker for Implementing Change Requests

If changes are needed, they can very quickly implemented by editing classes in CSS (for example, the new theme for Drupal core has a base font size of 15px. We’ve decided to up that to 16px - which means one line of code in CSS - instead of redoing all the Sketch files). The same is true if you want all image in a teaser list to position on the right hand side of the text instead of the left. Doing this in Phhotoshop is a pain.

3) QA Starts Sooner

QA testing can start waaaay sooner than using Photoshop or Sketch. As the client is signing off the designs (or each component) they are also signing off the frontend QA. Using something like PatternLab with Twig you can have almost the whole Drupal theme developed in this design phase, and then get the backend developers to output the HTML that will match it.

4) Signoff is on Real Devices

Client will see the designs in a real device and how they will render on that device - not looking at a mobile design on a desktop screen. When a client looks at a pdf of their new site, they will zoom out until the text is unreadable to see the whole page on one screen. No one will ever view the site like that though. Design in the browser forces your client to view the site as it will finally be viewed, in whatever browser/device they choose.

5) Multiple Variations is a Breeze

It’s very easy to show different variations of the same design (e.g. blog post with short title, long title, no image, etc) to see how the design stacks up against these real-world scenarios. This takes much longer in Photoshop or Sketch if you need to create individual mockups for each. Again, using PatternLab for this, you can have a base blog.json file (with the data for the blog component) and then extend that with each variation you need blog~long-title.json (with just the title variable changed), blog~long-title-no-image.json (you get the idea).

Okay so, at this stage it looks like I'm not a fan of Photoshop (I'm not) or InVision (I'm definitely not), or Sketch (I am! I love Sketch). So is there are place for these tools? Well, yes. If you designer likes to use them, and can work quicker with them (maybe he/she is not a frontend developer), then by all means they should use them. As each component is designed, they can then hand them over to the frontend team to implement them as HTML/CSS/JS, and it's these files that are sent to the client for signoff.

Won't that take longer? Initially, yes - it'll take a little longer to get the designs to the client, but the payoff is in how much sooner QA is done, how the client doesn't expect a unicorn to eventually be delivered as that is not what they signed off, and ... at some stage you are going to have to write the necessary HTML/CSS/JS, so why not early on?

After all that, what was the response from the person who said "2 or 3 should do"?

/me has started wondering how to turn @marky off now that he has started him...

I'll be speaking about this at DrupalCon Vienna on Wednesday 27th September at 15:45. My talk is titled: "Back to the Future: No More Static Mockups!" I'd love to chat with you there.

Here's a video of a similar talk from Frontend United in Athens this year:

Sep 14 2017
Sep 14
Then say your client says something like "This is great, but all the related content looks like the teaser on the listing page. Can't we choose ourselves how we want it to look?" What's your response? You say yes, and you go install Display Suite or Panels or some other heavy duty module? Or, say yes and follow these neat little instructions. No one says no to clients, do they?

Here's what you need to do:

1) Install Twig Tweak

Twig Tweak is such a great module you should have it on every website. Don't believe me? Read what I did with it to allow editors to choose the image style they wanted for their images.

2) Add a Node Reference Field

Add a field to your content type (or paragraph type, etc) that allows you to reference content. In my case, I called it 'Related Content', with a field name of 'field_related_content'. On the manage display page, you can leave this field as 'Disabled'. We'll load it using Twig Tweak in a minute.

Drupal Entity Reference Field in Disabled Region

3) Add a Select List Field for the View Modes

Add a field of type 'Text: List'. Set the keys of the options of that field to be the same as the machine name of your view modes, like so:

teaser|Teaser
full|Full
title|Title
 

Make sure editors can only choose 1 value, and set a default value just in case they forget or neglect to fill in that field.

Select view mode for related content

4) Render the Referenced Content, using the Chosen View Mode, in your Template

Once you are that far, use code like this to render the selected related content with the chosen view mode:

{% if node.field_related_content.value %}
    {% set custom_view_mode = node.field_view_mode.value %}
    {% set node_id = node.field_related_content.value.0.target_id %}
    {{ drupal_entity('node', node_id , custom_view_mode) }}
  {% endif %}

Here's the notes on what is going on:

First, make sure the 'Related Content' field is filled in, or else we'll be rendering empty divs.
{% if node.field_related_content.value %}

Next, set the value of the select list as a new variable called 'custom_view_mode'. 'view_mode' is already taken in the node.html.twig template.
{% set custom_view_mode = node.field_view_mode.value %}

Then, set the ID of the referenced content to a new variable called 'node_id'
{% set node_id = node.field_related_content.value.0.target_id %}

Finally, use Twig Tweak module to render the entity of type 'node' that has an id equal to our 'node_id' variable , and render this node using the view mode that is equal to our 'custom_view_mode' variable.
{{ drupal_entity('node', node_id , custom_view_mode) }}

So there you have it - render an entity using a view mode in a template in just 5 lines of code.

Mar 29 2017
Mar 29

Hang on, doesn't that mean that the age old problem of people's heads getting chopped off will rear it ugly head (excuse the pun)? In the olden days, yes; but given the AMAZING work the Drupal Media team has done, we were able to use a cropping tool (Image Widget Crop) to allow editors to choose how each image would look for each image style created. This means one image uploaded to the site, reused in many representations, without fault. How we did that can be explained in another blog post - for now, these screenshots should suffice to show how seamless our solution works:

Drupal 8 media crop - landscapeDrupal 8 media crop - portrait

And now for our solution to allow editors to choose which version of the image they wanted for teasers. What we did was created another text field with two options 'Landscape' and 'Portrait'.

Drupal 8 node edit form teaser section

Then in the twig file for the teaser view mode (node--teaser.html.twig) we checked what the value of this field was. We then used the 'Twig Tweaks' module to load the image with the corresponding image style.

The code looks like this:

This blog post was inspired by Third & Grove's blog post - One Image Field, Multiple Aspect Ratios.

Nov 10 2016
Nov 10

Clients sign off on designs. You build a website for them based on these designs. It looks quite like the designs, but not exactly like them. It's not your fault. It's not the client's fault. But wouldn't it be nice if you could build what the client signed off?

Why are the websites we build not exactly like what the client signs off and why is it nobody’s fault? Here’s three (good) reasons:

  1. Websites in the real world use real content – not all titles have 5 words, images have different dimensions, etc.
  2. Designs are in static (image) format so can’t be tested on real devices and screen widths such as phones, tablets, desktops, and smart TVs. So, even though you've got “mobile” designs, they were designed for a specific mobile screen size, but mobile screen sizes can be anything from 3.5 inches to 11 inches.
  3. The designs were completed in my most hated design tool – Photoshop, which renders design elements (especially fonts) different to how browsers do. For example, a thin font in Photoshop might be much fatter in Firefox. Why not just see what it’s really going to look like.

Photoshop is for editing photos (the clue is in the name) not designing websites. If your designer comes to you in 2016+ with designs created in Photoshop, you’ve hired the wrong designer.

Surely there’s an interface designer that is better than Photoshop? There is: SketchApp - built especially for designing user interfaces, but it still falls waaaay short when you want to give your clients designs that they can touch and feel and smell and see exactly what they are going to get. SketchApp is great for rapid prototyping and early stage mockups. It’s great for quickly designing ‘patterns’ or ‘elements’ but not for full designs – again, you can’t expect clients to get a true feeling for how their website works rather than looks by giving them static images of it.

Right, Mark, is there a solution to this conundrum? Yes. It’s called “Design in the Browser” - use the tool that the design will be accessed in to create the design. Give your clients a coded-up prototype. Get your design ideas into code, send your client a link to the website. Let them test it on their phone, on their tablets, on their teenagers’ PlayStations, on their desktops. Let the CEO scream when it doesn’t work on his Windows XP with IE8 as the browser he refuses to let go of. And then explain to him that he wouldn’t have known that if we had sent him a Photoshop document and if he wants it to work on his dinosaur of a machine, it’s going to cost him 30% more. Let him make his decision based on real world interactions.

Do you have a magic workflow that can slay all the dragons?

Here’s my 10 Step Plan for Losing Weight (or at least reducing technical (frontend) debt):

  1. Discovery: see what the client wants.
  2. Research: find out what the client actually needs.
  3. Rapid prototyping 1: use pen and paper, post-it notes, anything to come up with quick ideas about what a design might encapsulate, what a workflow might look like, how an interaction might function.
  4. Rapid prototyping 2: use SketchApp to create quick outlines of what elements of the design might look like (from herein called ‘components’). For example, a search box (input and submit button with bounding border), a news teaser (teaser image, title, post date, snippet, read more link), etc.
  5. Create each design component as an actual coded object. Write the HTML for the structure, the CSS for the layout and styles, and the JavaScript for any interactivity.
  6. Use these design components to create fully-fledged mockups of sample pages of the new website – homepage, listing page, full article – complete with real sample content and images from the client's website.
  7. Send a link to the prototype to the client. This is their designs delivered. Ask for feedback.
  8. Make changes based on client feedback.
  9. Get sign off for the designs from the client.
  10. Use the HTML, CSS, JS from the prototype in the real world implementation of the designs. In short, create a website exactly like what the client was expecting. Not an approximation of it, the thing itself – so the product they get is the product they sign off.

10 Reasons Why Your Client Needs to Insist You Design in the Browser

  1. We use real world content to test that the designs work with the same type of content our clients create.
  2. We can test these designs on the devices they are ultimately going to be consumed on – phones, tablets, desktops, etc.
  3. QA for the frontend begins very early: as the client is signing off the designs, they are signing off the frontend of the website.
  4. QA becomes an on-going item throughout the website build, not something tacked on at the end.
  5. If the client wants an updated design – for example, she would like all text on buttons to be uppercase, we can simply edit the .button class in our CSS and not have to go through 40 PSDs to change each instance of it, saving you time and effort and the client money.
  6. Because we have an interactive prototype of the website, we can use this for regression testing. So, if you add a new feature to the website in Phase 2, you can easily check that the new feature doesn’t break any of the present features.
  7. The client always has the most up-to-date copy of the designs. All they need to do is click on the link you have sent them to see what has changed.
  8. You are providing your client with a styleguide. They can mark this against their print brand guidelines to make sure both are in sync.
  9. When a new feature is requested your client will already have a list of pre-defined design components to choose from. This means you may not need to invent new ones – again, a money saver for the client.
  10. There are no surprises or hidden charges. The client gets what they client is paying for.

I know, I know. This sounds difficult. It sounds like a new way of working. It’s going to take time and effort to implement this workflow. You build websites with Drupal, does this mean you will have to maintain two versions of the frontend?

I come with solutions, not problems. Our tool of choice for this approach is an “Atomic Design” system called PatternLab. This lets us do everything listed above. Using Version 2 of this allows us to integrate the templates that we create for PatternLab directly into our Drupal workflow. What does this mean? Well, without blowing your mind too much, it means that the design that the client signs off is the actual code that is going to be used in the Drupal theme. We do not copy/paste the CSS and JS from one place to another, we do not have anything magic to try to keep two systems in sync. We provide the client with a URL such as styleguide.example.com and they can refer to that as the canonical design as a static HTML prototype while example.com will be the Drupal implementation of it – pulling the templates, CSS, and JS into its system.

Thanks to the great work from the folks behind PatternLab and with some very generous help from the great team at Phase2 who first created a Drupal version of it, we are able to design in the browser, get sign-off from our clients, and then focus on developing the CMS with the frontend work already complete.

Ooooh. That sounds nice doesn’t it? Tune in for part 2 of this series where I’ll detail how to use PatternLab with Drupal. Or, even better, come to Drupal Camp Cork on November 25 and 26 where I’ll be giving a presentation about all of this.

Nov 07 2016
Nov 07

1) Check if a user has a permission

@ceaucari wanted to check if a user had permission to do something, and if so certain code would execute. Like everything, it's simple when you know the answer.

{% if user.hasPermission('administer nodes') %}
  ... do something
{% endif %}

Thanks to @hj for providing it.

Check if a user has a permission in Drupal Twig

2) How to print comments separate from fields in a node template

Print comment and comment form fields separately

This one was fun, for no other reason than I was up late having a bottle of beer on a Friday evening when my friend Preston So needed help printing comment fields in nodes (mid-afternoon his time). The specific request was to get the variable for a custom comment type that he wanted to print in a node template. After some late night (by European time zones) investigation, and kinting the hell out of {{ content ... }} I came up with a variable to show the custom comments and another to show the custom comment form.

  {% set custom_comments = content.field_custom_comments.0.comments %}
  {% set custom_comments_form = content.field_custom_comments.0.comment_form %}
  {{ custom_comments }}
  {{ custom_comments_form }}
Print comments and form in Drupal Twig

3) Add body class based on field value

Sometimes you have a field on a content type and you want to take the value of that field and add it as a body class in your HTML. We often do this on our websites so users can choose a background colour for the header on a node-by-node basis, or choose how wide a structured content item should be, for example. This is exactly what @danny_englander needed to do:

Add body class based on field value

Our solution for this was to use THEME_preprocess_html, using code such as this:

function weather_preprocess_html(&$variables) {
  // Get the value of the "Site Section" field and add it as a class on <body>
  // This allows us to have specific colours used within each site section
  // _as long as_ each node is tagged with a site section.
  $node = \Drupal::routeMatch()->getParameter('node');
  if ($node instanceof \Drupal\node\NodeInterface) {
    if ($node->field_site_section) {
      $section_style = $node->field_site_section->value;
      $variables['attributes']['class'][] = $section_style;
    }
  }
}
Print value of node field in body class in Drupal 8

4) Override a twig template from a module using another module

Sometimes modules provide templates with them, such as paragraph.html.twig in the paragraphs module. Sometimes you want to override that template with a custom module (rather than your theme) so the override is available to all themes being used (if you were using themekey for example, or Seven for site editing and your custom theme for the frontend).

This is what Jim Birch needed to do. And after asking the question he found a solution himself and posted it to the Slack. Here's the code:

/**
 * Implements hook_theme_registry_alter().
 */
function bootstrap_paragraphs_theme_registry_alter(&$theme_registry) {
  $module_path = drupal_get_path('module', 'bootstrap_paragraphs');

  // Use the templates in the boostrap_paragraphs module.
  $theme_registry['paragraph__default'] = $theme_registry['paragraph'];
  $theme_registry['paragraph__default']['path'] = $module_path . '/templates/paragraph';
  $theme_registry['paragraph__default']['template'] = 'paragraph--default';
  $theme_registry['paragraph__accordion'] = $theme_registry['paragraph__default'];
  $theme_registry['paragraph__accordion']['template'] = 'paragraph--accordion';
  $theme_registry['paragraph__carousel'] = $theme_registry['paragraph__default'];
  $theme_registry['paragraph__carousel']['template'] = 'paragraph--carousel';
  $theme_registry['paragraph__modal'] = $theme_registry['paragraph__default'];
  $theme_registry['paragraph__modal']['template'] = 'paragraph--modal';
  $theme_registry['field__paragraph__field_column_content'] = $theme_registry['field'];
  $theme_registry['field__paragraph__field_column_content']['path'] = $module_path . '/templates/field';
  $theme_registry['field__paragraph__field_column_content']['template'] = 'field--paragraph--field-column-content';
}
Override a twig template from a module using another module

ADDED BONUS EXTRA FEATURE: In true Drupal fashion, a co-developer of his found an even better solution. Here's that code:

/**
 * Implements hook_theme().
 */
function bootstrap_paragraphs_theme($existing, $type, $theme, $path) {
  return [
    'paragraph__default' => [
      'base hook' => 'paragraph',
    ],
    'paragraph__accordion' => [
      'base hook' => 'paragraph',
    ],
    'paragraph__carousel' => [
      'base hook' => 'paragraph',
    ],
    'paragraph__modal' => [
      'base hook' => 'paragraph',
    ],
    'field__paragraph__field_column_content' => [
      'base hook' => 'paragraph',
    ],
  ];
}
Override a twig template from a module using another module

5) Save render array as variable

This blew my mind. I always thought of saving strings or fields as variables, but as @lauriii pointed out you can save render arrays as variables as well - makes sense when you think about it!

{% set variable_name %}
  {% for item in national_office_address %}
    {{ item.address_line1 }}
    {{ item.postal_code }}
    {{ item.country_code }}
  {% endfor %}
{% endset %}
Save render array as variable

6) Override all CSS from a library except one file

Say you have a library of CSS which contains loads of CSS you don't need and just a little bit you do - maybe you want to override everything in classy except one file, well you can. Of course you can. This is what @mark wanted to do. And @alexbea was to the rescue:

parent/parent-lib: false #removes the whole parent library

parent/parent-lib:
  css:
    css-file.css #allows you to bring back in just the file you want.
Override all CSS from a library except one file

That's it for Volume 2. Naturally there was loads of more learning and teaching and sharing and helping going on. Join us here.

Sep 29 2016
Sep 29

My fingers are trembling typing this. I can't believe it. This morning everyone in Annertech land is thinking "did that really just happen?" It appears it did, we are the web agency of the year!

Last night, to top off the other three awards we won - best arts and culture website, most beautiful website in Ireland, and best website (all for Ireland.ie) - we then went on to win Best Web Agency 2016.

Speaking to accept the award, Alan Burke thanked the great team we have in Annertech and our fantastic clients who trust us with such important work.

Afterwards, Stella Power had the following to say, "it's just amazing. I always knew we had a great team. We work so well together, we get on so well, we're not co-workers or colleagues, we're friends. And when working with your friends it's much easier to do great work. This award vindicates everything we've been doing to make Annertech the agency it is".

Please join me in congratulating Annertech on this fantastic news. Annertech: Web Agency of the Year 2016.

Sep 29 2016
Sep 29

We knew Ireland.ie (built by Annertech on Drupal) was a special website. The design is beautiful thanks to the amazing work of BigO Media, the content, media, and experience is second to none thanks to the the team in the Ireland.ie office at the Department of Arts, Heritage and the Gaeltacht. The implementation is without flaw (if we say so ourselves!).

Last night at the Realex Web Awards 2016 ireland.ie was nominated in two categories: "Best Arts and Culture" website and "Most Beautiful Website in Ireland". It won both. Were we happy? We were ecstatic but that was increased moments later when we won the Grand Prix, the overall winner for "Best Website in Ireland" 2016. Congratulations ireland.ie - winner of three awards!

As well as the above awards we (Annertech) won one more - WEB AGENCY OF THE YEAR 2016. That was just amazing!

Sep 26 2016
Sep 26

We're all very helpful people in the Drupal community and so help should easily be available. But sometimes you get caught out and can't find people nearby - you get lost, you lose your phone, you're in an area of town and haven't a clue how to get back to your home, you are locked out of your AirBnB, you've gone to kiss the Blarney Stone not realising it was 350km away!

If you need help with anything while in Dublin, please get in contact with us. We have lots of local knowledge (and a team of 15 people here for DrupalCon) willing to help you. You can contact us via:

email: [email protected]
email: [email protected]
phone: +353 (0)1 524 0312
twitter: @annertech
 

We'll be keeping a good monitor on all of the above and will do whatever we can to help anyone that needs it.

Sep 22 2016
Sep 22

DrupalCon Dublin is just around the corner (since I live in Ireland, I mean that literally!). DRUPALCON: HEAR ME ROAR! (or at least speak, along with some other Annertechies). At DrupalCon we'll be speaking on a number of topics (interesting aside: we're the only Irish agency with any speakers at this year's DrupalCon). Here's a quick roundup of our talks and why you won't want to miss them:

Speaker(s): Alan Burke and Aisling Furlong

Where: Liffey Meeting 2 | 10:45

Why come to this: You will learn what large organisations look for when selecting a CMS, how you can pitch Drupal as the CMS of choice, what competition Drupal has and how it fares against it. You do want insights from one of Ireland's largest multinationals don't you?

Speaker(s): Mark Conroy

Where: Wicklow Hall 2B | 14:15

Why come to this: Come get an overview of how to use Drupal as a decoupled system, how to use Ionic Framework (and AngularJS) to take the decoupled data to make a hybrid webapp that can run on iOS, Android, or the native web. Sorry Windows phone.

Speaker(s): Alan Burke

Where: Liffey Meeting 3 | 12:00

Why come to this: Learn from our insights gained building ireland.ie, where we built a co-lingual rather than multi-lingual website. In a co-lingual website all languages present are given equal importance. We made sure this was true on the frontend and the backend.

Speaker(s): Andrew Macpherson

Where: Liffey Meeting 4 | 10:45

Why come to this: Andrew, Drupal core maintainer for accessibility, is one of Drupal's most recent core maintainers. In this core conversation he will discuss the present state of accessibility of Drupal, where it might be improved, and how we can do so. Andrew is the only core maintainer working for an Irish agency.

Speaker(s): Anthony Lindsay

Where: Wicklow Meeting 1 | 10:45

Why come to this: Anthony, Annertech's lead support engineer, works from home (like the rest of us here at Annertech). Come listen to Anthony tell in his own inimitable style why remote working makes him happy.

That's our official speaking slots. Don't miss them, and don't forget to say hello to us at Booth 901.

Sep 21 2016
Sep 21

Without doubt, the greatest resource for information about Drupal frontend issues is the DrupalTwig Slack. There are over 300 of the world's most well known frontend Drupal developers - Wim Leers, MortenDK, Mark Drummond, David Hernandez, and more - offering and receiving help all day every day. It's very rare that someone asks a question and doesn't receive a reply with a solution within a few minutes, or at the very least a conversation about why the issue might be hard to solve.

That said, as a free Slack we do not have the ability to search through more than 10,000 posts at a time. With that in mind, I've decided to start compiling things I've learned or have helped others to learn on the channel so we can have a record of them. So here goes:

1. How to get the value of a link field in Twig in Drupal 8

Get the value of a link field in Drupal Twig

This is definitely the question that pops up most often. You'd be forgiven for thinking you could get it by printing {{ content.field_link }} but the field_link is an array, so you need to get the correct item from the array. It's simple when you finally crack it: {{ content.field.0['#url'] }}. Thanks to mdrummond for sorting this out. You can also find info about it on Stack Overflow.

2. How to create/alter global variables

Create/Alter global variables in Drupal 8

This was a question I had when one of our developers wanted to have a destination to the current URL in the path after a form was submitted. It's handy because it creates a variable that can be printed in any template. You can do this using the MYMODULE_template_preprocess_default_variables_alter(&$variables) hook (thanks to mikeker for pointing this out to me). The code:

You can then print {{ current_path }} in any template. Which brings us to item 3.

3. Themes cannot alter global variables

Themes cannot alter global variables

I could not get the above code to work when placing it in my THEME.theme file. As it turns out, global variables can only be run from a module, not a theme. There is an issue filed to fix this. Again, thanks to mikeker for clarifying this.

4. Use Preprocess to float image/text in paragraph bundles

Use Preprocess to float image/text in paragraph bundles

If you have a paragraph bundle for image and text and want to be able to let the editors choose to float the images left or right, this comes in handy. You can also manipulate it to allow editors to choose heading types from a select list, or the width of a bounding area for example.

In the above example, we have a select list field that the editor uses to say if they want the image left or right. In other paragraph bundles we have a heading text and heading level field, so editors can easily edit the heading style if they wish. Jim Birch shows a method of doing this purely in Twig in this gist.

5. How specific can you get with preprocess functions?

how specific can you get with preprocess functions

It turns out that hook_preprocess_field() is not as specific as you can get. As Chris Shattuck shows you can preprocess inside the entity type inside the bundle. So, mytheme_preprocess_field__node__body__page will preprocess the body field inside nodes of type page.

6. Preprocess functions only affect the render array that is sent into that render array’s template, they don’t affect the render array itself.

preprocess functions only affect the render array that is sent into that render array’s template, they don’t affect the render array itself.

Preprocess only affects the render array that it is called on. For example, if you change a field setting in hook_preprocess_field, that setting will not be changed in a node template. Yes, I'm still trying to figure this one out as well.

7. How to add template suggestions for custom blocks

How to add template suggestions for custom blocks

I presumed, like with custom content types, there would automatically be template suggestions for custom block types. But no. You can add them with the following code (amend to your liking):

The above code is an edited version of Jeff Burnz's solution from Drupal.org.

8. How to add bundle class to blocks

add bundle class to blocks

As with the above, I presumed custom blocks would have a class for the block type for theming. They don't. A few of us put our heads together and quickly came up with the above, after refining the thoughts of Greg Boggs.

add bundle class to blocks

Here's the code:

I haven't checked yet to see if that only works if the block has a body field. I suspect so.

9. Views exposed form block is not part of views-view.html.twig

Views exposed form block is not part of views-view.html.twig

If you have a view with some exposed filters that are in a block, the exposed filters cannot be printed via views-view.html.twig (without doing some preprocess work first).

That's just a very small selection of some of the things I've learned and/or helped solve in the DrupalTwig Slack. You should join us to help solve more (or get answers if you are stuck).

I'm guessing there are some better ways of doing some of these things. If you know them, please leave a comment.

Sep 20 2016
Sep 20

This day next week, as part of the Drupal Ireland Association, we will be delighted to welcome you to Dublin at the DrupalCon Welcome Party. It's on a boat, which is going to be deadly ("deadly" in this context means great, "lethal" would mean dodgy/dangerous!). The boat is just across the road from the convention centre, so that will be savage ("savage" of course means lots of fun). However, the ceiling inside the boat is only about 2 metres high, that's going to be a bit cat (let's just say "cat" doesn't mean brilliant).

So what is this hoolie (usually a loud party with lots of traditional instruments and improptu performances, but not in this case) all about? It's about the Drupal Ireland Association giving a céad míle fáilte (one hundred thousand welcomes) to the world when they arrive in Baile Átha Cliath (Dublin). It's about us showing gach duine (everyone) that we are a welcoming community of Drupalists in Ireland. That we are open to new people coming on board and helping out with what we do - we'd love to hear from Irish people using Drupal whom are not members of Drupal Ireland yet and also people from other tech scenes here.

The party is on the MV Cill Airne boat (Cill Airne is the Irish for Killarney - you won't be disappointed if you go there - and means the "church of the sloes"). It's starts at tea time (18:00) and goes on until serving time finishes (23:30 on a Tuesday). Come join mise (pronounced misha, means "me"), all the rest of the Annertech team, many others from the Drupal Ireland Association, and hundreds (sorry we can't fit thousands onto the boat) of other Drupalists at the DrupalCon Welcome Party to have a savage, deadly night of craic (fun).

Sep 13 2016
Sep 13

Annertech will be descending upon DrupalCon with (nearly) our full team of "Annertechies". So much so that there will be more Annertechies in attendance than all other people from Irish agencies combined. With that kind of showing, we thought we'd introduce ourselves and let you get to know us.

Stella Power

Stella is Ireland's Drupal wunderkind. Founder of the Drupal Ireland Association, member of the Drupal security team (the only person from an Irish agency with that accolade), and managing director of Annertech, Stella is the kind of person that doesn't come along often enough. Stella has spoken at many European DrupalCons; this year she was track chair for the business track and is also the local liaison for DrupalCon.

Alan Burke

Alan is also a director of Annertech. When not keeping the invoices raised and paid, he's focussing on being a top-notch frontend developer. In this vein, his main passion is for website performance. Alan has spoken at a lot of DrupalCons over the years; this year he will be speaking about developing a co-lingual website for ireland.ie and why a multinational organisation might choose Drupal.

Dermot Frost

Poor Dermot has a tough life. He won't be able to make it to DrupalCon as he'll be preparing for a conference the following week in Boston. When not jet-setting, Dermot spends a lot of time building and maintaining server infrastructures.

Anthony Lindsay

Anthony is our lead support engineer. He makes sure that all our existing clients are happy. For Annertech, support often means on-going development of new features and enhancements to existing ones. If you have an existing website and would like us to support it, come talk to Anthony at Booth 901. This year he will give a presentation at DrupalCon about how remote working makes him happy.

Mike King

Mike keeps us all in check. He's our project manager. He makes sure we know what the client wants and deliver it to them on time, on budget, and with smiles on our faces. He was track chair for DrupalCon this year on the project management track.

Mark Conroy

Mark - me! - is a lead frontend developer with Annertech. He's very interested in maintainable code, design in the browser, component-based frontend, and how those three can be brought together. You can find him (too) often in the DrupalTwig slack. He'll be presenting at DrupalCon about getting started creating mobile/hybrid apps using Drupal as a backend and Ionic Framework as a frontend. Mark is presently chairperson of the Drupal Ireland Association.

Tommy Lynge Jørgensen

Tommy is one of our lead backend developers. He knows a lot about solr, and migrations, and backing up data. He comes from Denmark, lives in Ireland, and is the reason we have cake at Booth 901. Come for the code, stay for the cake!

Andrew Macpherson

Andrew is another lead backend developer in Annertech. He is the only core maintainer working for an Irish agency, having recently been made a core maintainer for accessibility. So, if you want an accessible Drupal website built by an Irish agency, get in contact with us. He will conduct a core conversation on the future of Drupal accessibility at DrupalCon.

Gavin Hughes

Gavin is one of our support engineers. Whilst Anthony makes sure that all our clients are happy, Gavin is the one beavering away in the background actually doing the work!!! (Sorry Anthony!) When not debugging issues and developing new features, he's probably kite surfing somewhere off the west coast of Ireland.

Bren Vaughan

Bren joined us recently as a project manager. Having trained as a developer, he is slowly recovering from his past life. He's also slowly recovering from participating in Iron Man competitions and other feats of endurance unknown to the rest of Annertech. He's got so much recovery to do, he won't make it to DrupalCon this year.

Ricardo Flores Galán

Ricardo, from Spain, is our in-house designer and UX expert. He checks the fine details of designs for consistency, brand adherence, vertical rhythm, and more. Oh, and his wife gave birth to a beautiful baby boy yesterday. CONGRATULATIONS. Ricardo is presently secretary of the Drupal Ireland Association.

Rob McCreary

Rob lives in Northern Ireland. He joined Annertech almost a year ago and has been doing some fantastic frontend work for us. Previously having worked in the non-profit sector he is a great compliment to many of the types of clients Annertech has historically serviced.

Adrien Sirjacques

Adrien is one of our backend developers, and has worked on a number of projects to add new features to existing sites and also some greenfields work. Though from France, he's very active in the Irish Drupal community and can be found each month at our Drupal Ireland meetup in Dublin.

Tom Bamford

Tom is English. He lives in France where he attends to the meadow, country walks, sunshine (which apparently is rare in Normandy) and frontend development. We're lucky to have him on board given his vast knowledge of Drupal, JavaScript, SASS and other complimentary items.

Karen Leech

Karen is also English. She also lives in France, and attends to the same things as Tom. Except, instead of frontend development she is a site builder and QA Analyst. You know when you miss out on a client request by just a tiny item? Karen is our backup to notice that and makes sure nothing gets to UAT without passing her exacting standards.

So that's it. A quick roundup of the Annertechies you'll (likely) meet at DrupalCon. We'll be at Booth 901 and here's some reasons why you should come talk to us.

Sep 08 2016
Sep 08

DrupalCon is big. It's got hundreds of sessions. A similar amount of BoFs. Approximately 2,000 attendees. Social events left, right, and centre. It's not hard to get confused, miss things that you promised not to, and leave thinking "damn, I could have done that better". At Annertech, we're Ireland's most seasoned DrupalCon attendees. Here's our guide to making the most of it.

Create a Schedule

You can add any session to your own personal schedule on the DrupalCon website. You can do this right now. Do so. With so many great sessions running concurrently, it's very hard to work out on the spot what to go to next. You can find your personal schedule here.

Attend BoFs

At my first DrupalCon (in Prague) I went to the all day media sprint on Friday. I can't explain how much I learned that day - amazing. It was then I realised that I had missed out (and it was too late) on great opportunities by only going to sessions during the week. BoFs are where you get down and dirty with the innards of Drupal and related technologies and theories - accessibility, Drupal for Museums, Open Data, etc were just some of the ones I attended in Barcelona last year.

What's a BoF? It's a "birds of a feather" meeting. Basically, people with a common interest book a room and sit around discussing it. It's usually someone with A LOT of knowledge about a topic that does so. The format is very informal and friendly, just like a tutorial in college, with usually less than 20 people in attendance. This year I'll end up at about 50% BoFs and 50% sessions (or less).

Go Easy on the Alcohol

Yes, we know, you're in Ireland and Irish people like to drink and party. That's true, but you're going to be here for a week. Please don't go overboard on Monday and be wiped out for the rest of the week (not least becuase my session is on Tuesday and I'd like to see you there!).

During the week there will be lots of social events. You are welcome to all of them. But do not feel pressured to drink alcohol or to buy drinks for others. Be respectful of yourself and others and when leaving venues please do so quietly - there are lots of people trying to sleep.

Attend the Keynotes

If you go easy on the alcohol, this one is easier to achieve. The keynotes are where you'll learn about the state of Drupal and the plans for the immediate future of it from Dries. This will be followed by a Q&A with Dries, moderated by a local volunteer, where you get to tweet questions to him.

The other two keynotes will be hugely relevant talks from very respected individuals - Emer Coleman and Eduardo Garcia.

Contribute to Drupal

There will be loads of opportunities to contribute to Drupal by sprinting and/or mentoring. There will be extended sprints each weekend before and after DrupalCon. The conference hotel will have a 24 hour sprint room. Contributing is how Drupal gets built. Please contribute.

Take Time Out

With all the talking and sessions and BoFs and keynotes and contributing, it's okay if your brain is feeling a little over-worked. We have a beautiful city in Dublin. Take some time out, go for a walk. Visit some our recommended things to see and do in Dublin. Talk to some locals. Enjoy yourself (DrupalCon is about more than just work).

And if all that fails to help you get the most out of DrupalCon, well, you could just go on the DrupalCon diet!

Sep 06 2016
Sep 06

Annertech DrupalCon Dublin Sponsors BadgeAs Ireland's leading Drupal devlopment agency, we were thrilled that DrupalCon was coming to Dublin. So much so, we were the first Irish agency to add our name to the sponsorhip list (not to mention being the only Irish agency with people giving presenations at it). For the week of DrupalCon we'll be manning Booth 901. We think you'll be glad you talked to us, here's why.

You have a project idea

You want to develop a website or other web application - cms, ecommerce store, crm, etc - and want to make sure that it is built by the best team possible in the shortest amount of time. Even though the project might be complex and the deadline short, you want to make sure you will be dealing with a team that is reliable and comes up with solutions, not problems.

You want someone to support your current website

You have a website. For whatever reason - you have no support contract at present, your current support agency is not up to scratch - you want to move support for this to a new agency. Supporting websites built by other agencies and developers is one of our strong points. We are constantly contracted to take over work started/completed by others. This usually involves moving your website to our first-in-class hosting platform, performance tuning it, making it more secure, and adding new features over time to get the website into the shape you envisioned for it.

You are a very reliable agency and need to partner with another very reliable agency

We have some fantastic partnerships with other agencies where we divide the work according to our strengths and availability. Need some developers to help out on the front-end? We can probably help you. Don't have experience integrating with SugarCRM or other third party system? We can certainly help you. Finished building a website and don't want to be the future maintainer? See our answer above!

You are a great Drupal developer

Like all good agencies, we are always open to discussions with people who are capable and have great ideas. Tell us what yours is; who knows, it might align with ours. Be careful though, we don't hire interns or junior developers: we expect people to be at least mid-level before coming on board with us.

We didn't mention all the things above that might make us sound arrogant, such as contributing more code to Drupal than all other Irish agencies combined, being Ireland's largest Drupal agency, having the only Irish-based member on the Drupal security team ... and lots more. If you want to hear those juicy details, well, that's just one more reason to come talk to us at Booth 901.

P. S. We'll have cake. You want cake don't you?

Sep 01 2016
Sep 01

Annertech DrupalCon Dublin Sponsors BadgeDrupalCon is coming to Dublin next month. Damn, we're exicted. You are too, we know. Actually, apparently there's a small few people still trying to make up their minds on whether to come to DrupalCon Dublin or not.

Sitting on the fence? Don't. Get off the fence, get to Dublin. Here's some reasons why (feel free to add more in the comments).

1) It'll be the best DrupalCon ever

Us Europeans know that the DrupalCon Europe is the best DrupalCon experience. Heck, Drupal was created by a European after all. So, with that disucussion out of the way, us Irish know (not just believe) that DrupalCon Dublin will be the best Europe has ever had.

This year there are more sessions, more speakers, more tracks than you can handle. More sponsors, more stands, more BoFs than is healthy. More sprints, more ... you get the idea. DrupalCon Dublin is going to be epic.

2) Meet and Greet the Biggest names in the Drupalverse

You know the way you get loads of free code to use however you want when you install Drupal? You know the way you get even more free stuff when you use contributed modules and themes? Well, many of the people who make that happen will be in Dublin.

When you come to DrupalCon Dublin you will get to meet your Drupal heroes. Make sure you thank them for all the great work they do and, cumulatively, the awesome product that we as the Drupal community (that includes you!) have all helped to build.

3) Get hired, Find talent, Make Connections

There's a DrupalCon meme - "I came back from DrupalCon and quit my job". The next item then is usually "and set up my own company". Well done to all who do this for their bravery, ambition, and self-belief.

Another great thing about DrupalCon is that loooooaaads of companies there are hiring. If you are looking for a job, you'll be hard pressed to leave DrupalCon without one. On the flip side, if you are looking to hire great Drupal talent, you could be no where better in the world than Dublin for DrupalCon.

If you are not looking for a job and are not looking to hire anyone, don't miss out on the great opportunity that DrupalCon affords for you to make some life-lasting connections with like-minded people and agencies. Want to scale? This is how.

4) Contribute to Drupal

Drupal is nothing without contributions. That's how free and open source software works. DrupalCon Dublin gives you many, many opportunities to contribute - to core, to contrib, to documentation, to your own personal projects.

If you are stuck with an issue, I bet someone in a sprint room will have a solution for you. If you have an idea you'd like to see in core, chat with a core contributor and get the ball rolling. If you've never contributed before, the mentored sprints for first-time contributors will make you feel very welcome.

And, as always, Drupal needs more mentors. (Dear mentors - If you're reading this, I'm happy to sign up this year!).

5) Have the craic

People who are not from Ireland always laugh at our word 'craic' pronounced 'crack'. Which is probably a very good thing. Because in Ireland to 'have the craic' means to have great fun.

At DrupalCon Dublin expect to have a week's load of craic between the discussions, sessions, BoFs, welcome party, other parties, hallway conversations and more.

Céad míle fáilte!

Presumably you haven't gotten to the end of this list because you've gone to purchase a DrupalCon ticket. That's great. If you have gotten to the end of this list, we're sorry we haven't convinced you. How about I get you a pint of Guinness when you get here?

Sep 01 2016
Sep 01

Annertech DrupalCon Dublin Sponsors BadgeComing to DrupalCon Dublin but planning to travel around Ireland a bit? Previously we blogged about our top recommendations to see and do in Dublin, but I know some of you are planning to stay for longer and so here are our recommendations for places to visit outside Dublin.

Day Trips from Dublin

1. Newgrange

Source: Stella Power

Newgrange is a stone age or neolithic monument located just north of Dublin in an area known as the Boyne Valley in County Meath. It was built about 5,200 years ago (c 3200 BC), making it older than both Stonehenge and the Great Pyramids of Giza! It is primarily referred to as a passage tomb, but that might be an over-simplification as to its significance in the lives of those who constructed it. It most likely held religious, spiritual or ceremonial importance due to its alignment with the rising sun and the flooding of the inner chamber with light on the winter solstice. The Boyne Valley contains over 35 other neolithic monuments all built along the River Boyne, such as Knowth and Dowth (also open to the public), and together are known as Brú na Bóinne and are a UNESCO World Heritage site. 

You can also visit the Hill of Tara, seat of the Irish High Kings. The oldest visible monument is the passage tomb "Dumha na nGiall"(meaning ‘the mound of the hostages'), but more interesting is the Lia Fáil (Stone of Destiny), a standing stone located within an area known as the Forrad or "The Royal Seat" - this was the inauguration stone of the Kings of Tara. 

2. Glendalough

Located in the Wicklow Mountains is Glendalough meaning the "valley of two lakes". It is a beautiful spot with stunning scenery and lots of walks and trails. There is also a world famous early Christian monastic site here, founded in the 6th century by St. Kevin. There are a number of monastic buildings and ruins here, the most impressive of which is the Round Tower standing at 30m high. There's also some Celtic crosses at this site too.

3. Powerscourt Estate and Gardens

Powerscourt Estate is a large country estate encompassing an 18th century mansion, landscaped gardens, a hotel, Ireland's highest waterfall and two golf courses! Powerscourt House has recently been voted one of the top ten houses and mansions worldwide. Part of the ground floor of the house is open to the public, but it also contains some shops (including Avoca handweavers) and Tara's Palace Museum of Childhood which features dolls, miniatures, historic toys and Tara's Palace dollhouse. The gardens have also been ranked in the top three in the world, with over 250 different types of trees, an Italian garden, a Japanese garden and much more besides. 

Further afield

1. Cliffs of Moher and the Burren

The Cliffs of Moher are one of Ireland's most visited natural attractions. Located on the west coast of Ireland in County Clare, not far from the village of Doolin, they stretch for 8km in length and range between 120m and 214m high.  A new Cliffs of Moher Visitor centre was built into a hillside approaching the cliffs and is intended to be environmentally sensitive in its use of renewable energy systems including geothermal heating and cooling, solar panels, and grey water recycling.

The Cliffs of Moher are also located in the rather unusual landscape of the Burren National Park. The word "Burren" comes from an Irish word "Boíreann" meaning a rocky place. In 1651 a Cromwellian Army Officer named Edward Ludlow commented on the Burren saying "there is not water enough to drown a man, wood enough to hang one, nor earth enough to bury them." This is all very apt given it's barren limestone landscape. The Burren contains a number of rare flora, some of which are only to be found here, and has been declared as a Special Area of Conservation. There are also some blow holes to be found where the sea has eroded away at the rock, and you can also visit the extensive caverns of the Ailwee Caves

Note, there are (long) day trips available from Dublin to the Cliffs of Moher if you wish.

2. Ring of Kerry and Dingle Peninsula

The Ring of Kerry is a long circular tourist route in the south west of Ireland in County Kerry. It essentially takes you on the loop of the Iveragh peninsula, and takes in many beautiful spots including Killarney National Park, the lakes of Killarney, Derrynane Abbey, and many beaches, stone forts and other places of interest.

The next peninsula to the north is that of Dingle, and is one of my favourite spots in Ireland. The views from the coastal road are spectacular and breath-taking. However, be warned that the road can be twisty and narrow in places (not helped by tourists stopping to take photos), so I'd recommend taking the clockwise route around the peninsula lest you meet a coach tour bus coming the other way! 

The Dingle peninsula is a Gaeltacht (Irish-speaking) area and you'll notice many of the road signs switch to being in Irish. Dingle (or An Daingean) itself is a busy tourist spot with a decent aquarium for kids, day trips out to see Fungi the dolphin and a pub for every week in the year. Other interesting spots on the peninsula are the Gallarus Oratory and Louis Mulcahy's pottery studio where you can try your hand at spinning a pot on a potter's wheel.

3. Giant's Causeway

The Giant's Causeway is located in Northern Ireland in County Antrim (so be sure to bring some Sterling if travelling from Dublin to it). It is the result of an ancient volcanic eruption which formed (mostly) hexagonal basalt columns as the liquid lava cooled and contracted. Declared a UNESCO World Heritage site in 1986, it is one of Northern Ireland's most popular tourist attractions.

Not far from the Giant's Causeway is the Carrick-a-Rede rope bridge. It crosses a 20m wide chasm over a 23m drop down to the sea below, so if you're afraid of heights, then this isn't for you! Also, nearby is the Bushmills Distillery which do excellent tours and a free whiskey tasting at the end.

Again, it is possible to do a day trip from Dublin to the Giant's Causeway if you wish.

Source: Sean MacEntee Source: Ben Askins Source: Sean MacEntee Source: Barbara Walsh Source: Ty

Aug 08 2016
Aug 08

Coming to DrupalCon Dublin? Planning to take some extra time to explore the city? Here's a list of our recommended things to do and see while here - other than Drupal of course!

1. Guinness Storehouse

Photo of Guinness Storehouse gateSource: Beatrice Tiberi

Home to the black-stuff, the Guinness Storehouse is a must-see in the Dublin tourism scene, and was recently recognised as the best tourist attraction in Europe in the World Travel Awards. A former Guinness fermentation plant, it was renovated and redesigned in the shape of a giant pint! On each of the seven floors you get to see how Guinness is made, before stopping off at the Gravity Bar on the top floor for 360 views of the city and a pint of Guinness.

2. Kilmainham Gaol

Photo of inside of Kilmainham GaolSource: Sean Munson

If you're in any way interested in Irish history, particularly the story behind our independence, then you have to visit Kilmainham Gaol. The leaders of the 1916 Easter Rising were executed here, while many other Irish nationalists were imprisoned here too. With this year being the 100 year anniversary of the Rising, there is a special "1916 Portraits and Lives" exhibition being held.

3. Trinity College Dublin & the Book of Kells

Photo of script from the Book of KellsSource: manuscript_nerd

Located in the heart of Dublin city, is the beautiful campus of Trinity College Dublin. The college was founded in 1592 by Queen Elizabeth and contains many historic buildings. The Book of Kells is also located here, and it and the Long Room library are both well worth a visit.

The Book of Kells is a beautifully illustrated manuscript dating back to around 800 AD and contains the Latin texts of the four Gospels, painstakingly written and illustrated by Irish monks. After visiting the Book of Kells, you can then visit the Long Room, the magnificent library housing all of Trinity's oldest books. The library was actually the inspiration for the Jedi Archives featured in the “Star Wars Episode II: Attack of the Clones” movie.

4. Little Museum of Dublin

Photo of the Little Museum of Dublin signSource: William Murphy

The Little Museum of Dublin is another cool place to visit. One of the newer museums in Dublin, it occupies a Georgian townhouse on St. Stephen's Green. Did you know that the DrupalCon Dublin logo features a Georgian door? 

The Little Museum has over 400 artefacts comprising art, photography, letters and advertising from the 20th century, offering a unique insight into Dublin over the last century. It's a small museum and won't take too long to wander around, but well worth the visit all the same.

5. National Museum of Ireland at Collins Barracks

Photo from Collin's BarracksSource: William Murphy

Collins Barracks was an army base for nearly 300 years before being renovated and is now part of the National Museum of Ireland - Decorative Arts & History. It showcases Ireland's economic, social, political and military progress through the ages and is itself a historical place of interest. It also played a role in the 1916 Easter Rising, as a base for British troops tackling rebel positions in the GPO and other locations around Dublin.

Other places of interest

If none of those take your interest, why not check out some of the following:

Jun 15 2016
Jun 15

Adding media (for most people that means adding images) in Drupal has been an issue for a long time. Adding reusable media (upload an image once, use it on any page on your website) has been even trickier.

With the advent of Drupal 8 and the sterling work done by the media team, adding reusable media (in a very user friendly manner) is now a reality. This tutorial shows you how:

Step 1 - Download and Install these Modules:

  • Media Entity (the base media module that other media modules can extend from)
  • Media Entity Image (or one of the other media entity type modules - Media Entity Instagram, Media Entity Twitter, Media Entity YouTube, etc)
  • Entity Browser (so you can browse through your existing media library and other entites to reuse them on your page)
  • Inline Entity Form (thanks to Drupal Commerce, this allows you to create new media items and/or select from your existing library)

Step 2 - Create Media Bundles

Navigate to /admin/structure/media and add a media bundle - for example "Image":

Drupal 8 Add media bundle interface

You will be asked to define a field to use as the image field, you can't do that yet as you have not created any fields.

Save the page, and then use the UI to add a new field to your image media bundle - at a minimum you will need an image field.

Drupal 8 media manage fields interface

Click the edit button to edit the image media bundle and check that the image field is now set as the field that the image will be sourced from.

Drupal 8 media file source field interface

You now have a media bundle for images. It's a similar process for creating other media types.

Step 3 - Add a Media Field to a Content Type

Navigate to the "Manage Fields" page of one of your content types and add a new field. Choose field of type "Other" under "Reference" (yes, it could be a little more intuitive!).

Drupal 8 media field type

On the following page, choose the type of entity that this field will reference/use - in our case "Media".

Drupal 8 Media choose entity reference type

On the following page, scroll to the end and select the types of media bundles that can be referenced from this field. In our case, we only have image at the moment. Save the page.

Drupal 8 Media select media bundles to reference - image

You now have a field that allows you to reference uploaded images using the entity reference widget. This means the image needs to have already been added to your site (at /media/add/) and that you know the name you gave to the image when adding it. Your node edit form will have a field like this:

Drupal 8 Media reference image entity on node edit form

Whilst this works, it doesn't allow us to add new images from here. Enter the wonderful Inline Entity Form module.

Step 4 - Create New Media/Use Existing Media - inline

Next, go to the "Manage Form Display" page on your content type. Find the reusable image field and change the widget from 'autocomplete' to 'Inline Entity Form - complex' (don't worry, it's not complex!).

Drupal 8 Media inline entity form

Click the settings cog on the right and set the inline entity form to be able to both add new media and use existing media:

Drupal 8 Media inline entity form settings

Now, when you are on your node edit page you will see an interface like this for your reusable image field:

Drupal 8 Media reusable media interface

"Add new media" will open up the form that is found at /media/add and let you add the media inline here.

Drupal 8 Media inline entity form form

After filling out this form, be sure to click on the "Create media" button. You will then see this:

Drupal 8 Media uploaded image interface

If you had chosen "Add existing media" from a few screenshots above, you will be given the same autocomplete interface that you saw earlier. This is because the Inline Entity Form is not yet using the "Entity Browser" module to search for your media.

Step 5 - Entity Browser Setup

To make this a little easier, I also installed the Entity Browser sub-modules "Entity Browser Test Modules". Then, navigate to /admin/config/content/entity_browser and choose "Add entity browser". In my case, I gave it a name of "Image Browser". I left all the settings as default until I got to the last screen "widgets".

I added a widget of type "Upload" and gave it a human readable name of "Add New Image" and added a widget of type "View" and gave it a human readable name of "Reuse Existing Image" (then chose the "test" files browser view as the view that I would use to find my files).

Drupal 8 entity browser widgets

A caveat - I couldn't get this to work with the Inline Entity Form (it's possible in code - see the "hook_inline_entity_form_reference_form_alter()" in "entity_browser_entity_form.module"). However, there is a UI being built for it which should be ready soon, so I decided to wait for that.

In the meantime, on the content type "Manage Form Display" page, if you set your reusable image field to use "Entity Browser" you can see what it will be like when it's working fully. This (an example of the browser using an iframe:

Drupal 8 entity browser using iframe

And that's about it, a quick roundup of how to add reusable media to your Drupal 8 website - it's almost the holy grail and once we have entity browser working with the inline entity form, it will be the holy grail.

Thanks and well done to all on the media team (of which I have been only a very peripheral part).

Mar 01 2016
Mar 01

This was the user story: "As a site admin, I want to be able to add different types of content chunks on any page with customisable backgrounds, so that we have control over the style and layout of our website". Yes, it's a pretty big user story, but bear with me.

When working with a large government client recently we made special efforts to ensure that all the content on the website was developed in a structured manner and to develop mechanisms for what Karen McGrane calls 'chunks' of data instead of a 'blob' in the body field. We had been trialling the Paragraphs module on a number of sites (being cautious because of some issues that it's older relation Field Collection had with multilingual and revisions when used with Workbench Moderation). We gave Paragraphs the full treatment on this site, creating paragraph bundles for section headings, text blocks, image (with optional caption and float left/right capabilities), slideshow, call to action, and more.

Drupal, adding structured content

We then created a paragraph bundle called 'Structured Content Block' which had two fields: a background colour field and a multivalue embedded paragraphs field of all the above named paragraphs, a concept we called 'The Russian Doll'. This meant that the client could create any type of content within their pages and reorder it at will.

Drupal, adding structured content items

Another requirement was the ability to create landing pages on the fly, with some default content on every landing page, but all other aspects of the page customisable, while retaining a content model of one single source of truth. To achieve this, we used Panels and Panelizer. This meant we could create a content type called "Landing Page" and set some default views that would be placed on all landing pages. These were further restricted by only showing nodes in the views that were also tagged with the same taxonomy terms that were found on the landing page. So, a landing page of Type: A, and Topic B, and Sub-topic C would only show news items that had the same taxonomy terms selected. Next we created a panels plugin with lots of regions to allow the client maximum flexibility when it came to how the pages would be laid out. This screenshot shows about half of those regions.

Drupal, custom panelizer page

A further requirement was that all panes needed to be customisable in terms of background colours and the content that could go into them. So, they needed to be able to accept the standard things that panels can - existing nodes, views content panes, blocks and other widgets. However, the client also wanted to be able to add ad hoc (though reusable) chunks on these landing pages. To achieve this we used Fieldable Panel Panes, and 'The Russian Doll' approach from above. Fielded panels panes had two fields - background style and embedded paragraphs. This allowed the client to create panes with a background colour and then create paragraphs inside these of different content chunk types. The panel panes are re-usable, so if you create one for one landing page, you can then use it again in another one. Here's the set up for a fielded panel pane (which we called "Landing Page Item"):

Drupal, adding fieldable panel pane

This was the user story: "As a site admin, I want to be able to add different types of content chunks on any page with customisable backgrounds, so that we have control over the style and layout of our website". Yes, it was a pretty big user story, but we beared with it.

Now, your turn - what's your approach to structured content in Drupal? What's your experience of Paragraphs module? More specifically, have you any thougths on the mixture of paragraphs with panelizer and revisions/workbench moderation (especially on multilingual websites)? Let us know in the comments.

Jan 11 2016
Jan 11

During the Christmas break, I decided to give myself a challenge: increase my knowledge of app building, AngularJS, and Ionic Framework. Since I didn't know very much about any of them, that was the easy part. I then gave myself a second task - build a hybrid app for my local town that would give us home, current weather, and news tabs, with all content being derived from online data sources.

The tutorials I was reading showed how to do one thing for each app. Hopefully this one will show you how to create an app that does more than one thing and then you can extend it further yourself.

You will need:

  1. Drupal with a view created to list some content (I'm using the articles list from my personal blog)
  2. Ionic Framework (details on how to install Ionic Framework are here)
  3. Views Datasource module (it's the views_json submodule of this that we'll be using). You might also need the CORS module (if your server is not allowing your app to pull data from it - more details later).
  4. To suspend your design thoughts (this app is ugly, but I'm only interested in functionality for this tutorial)

The Drupal Part

  • Download views_datasource module.
  • Enable views_json module from this package.
  • Create a view to list some content.
  • Make sure you are using 'fields' rather than 'rendered entity'.
  • Make sure you give each field a title - this will be used later on when drilling down through the JSON output.
  • Create a page display setting 'format' to 'JSON data document' (I left all the options as default, you can play around with them if you wish)
  • You should get a JSON output.

The Ionic Part

I'm presuming you have installed and set up Ionic following their 'Getting Started' guidelines, and have set up a 'Tabs' app.

Creating New Tabs

To add a new tab, go to your www folder and find the tabs.html file which is inside the templates folder. To add a new tab you can copy/paste from one of the existing ones. I added:

  
Tabs created for current weather and news feed using Ionic Framework

Notice here how the icons are chosen by icon="" attributes. You can find a list of all the available icons at the Ionicon Cheetsheet. The darkened tab is the currently active one.

The State of your Tabs!

Next we need to add the 'states' that tabs can have, including what template will be used to display the content for each. To do so, you need to navigate to your js folder inside www. Find the app.js file and edit this to add new states. In my case I added states for weather and news, like so:

    .state('tab.news', {
      url: '/news',
      views: {
        'tab-news': {
          templateUrl: 'templates/tab-news.html',
          controller: 'NewsCtrl'
        }
      }
    })
    .state('tab.weather', {
      url: '/weather',
      views: {
        'tab-weather': {
          templateUrl: 'templates/tab-weather.html',
          controller: 'WeatherCtrl'
        }
      }
    })

It should be quite self-explanatory what is going on here. We have set a state for the tab, given it a URl and then told our app what template to use and what controller will set its functions. Make sure you create .html templates to match what you have set here.

The Weather Part

Next I set about actually grabbing the data for the current weather in my local town and adding it as a service in my services.js file in www/js. To do this, I am using forecast.io. (You'll have to sign up for an account to get an API key and then replace YOURAPIKEY in each place you see it in the following code:

(function () {
  'use strict';

  var forecastioWeather = ['$q', '$resource', '$http', 'YOURAPIKEY',
    function($q, $resource, $http, YOURAPIKEY) {
    var url = 'https://api.forecast.io/forecast/' + YOURAPIKEY + '/';

    var weatherResource = $resource(url, {
      callback: 'JSON_CALLBACK',
    }, {
      get: {
        method: 'JSONP'
      }
    });

    return {
      //getAtLocation: function(lat, lng) {
      getCurrentWeather: function(lat, lng) {
        return $http.jsonp(url + lat + ',' + lng + '?callback=JSON_CALLBACK&units=si');
      }
    };
  }];

  angular.module('starter.services', ['ngResource'])

  .factory('DataStore', function() {
      //create datastore with default values
      var DataStore = {
          city:       'Portumna',
          latitude:   53.0905,
          longitude:  -8.2337 };

      DataStore.setCity = function (value) {
         DataStore.city = value;
      };

      DataStore.setLatitude = function (value) {
         DataStore.longitude = value;
      };

      DataStore.setLongitude = function (value) {
         DataStore.longitude = value;
      };

      return DataStore;
  })
  .factory('Weather', forecastioWeather);
}());

Note above the '&units=si" addition in the JSON_CALLBACK. This sets the temperature to Celsius. Leave that out if you want to use Fahrenheit.

You will then need to add a new controller in your www/js/controllers.js file. Mine for the weather section looks like this (remember, replace YOURAPIKEY with your API key):

.constant('YOURAPIKEY', 'YOURAPIKEY')
.controller('WeatherCtrl', function($scope,$state,Weather,DataStore) {
  //read default settings into scope
  console.log('inside weather');
  $scope.city  = DataStore.city;
  var latitude  = DataStore.latitude;
  var longitude = DataStore.longitude;

  //call getCurrentWeather method in factory ‘Weather’
  Weather.getCurrentWeather(latitude,longitude).then(function(resp) {
    $scope.current = resp.data;
    console.log('GOT CURRENT', $scope.current);
    //debugger;
  }, function(error) {
    alert('Unable to get current conditions');
    console.error(error);
  });
})

Next in my tab-weather.html file (in www/templates) I added the following code to display the weather:



The (unstyled) finished product looks like this:

Weather results displayed using Ionic Framework

This weather section was created with some help from this BinPress tutorial.

The News Reader Part

We have already added a news tab 'state' in app.js. We now need to add a new controller for it in controllers.js. Here's what I have:

.controller('NewsCtrl', function($scope, $http) {
  $scope.init = function() {
    $http.get("http://www.mark.ie/articles/feed/json")
      .success(function(data) {
          $scope.nodes = data.nodes;
          $scope.browse = function(v) {
            window.open(v, "_system", "location=yes");
          };
          window.localStorage["nodes"] = JSON.stringify(data.nodes);
      })
      .error(function(data) {
          console.log("ERROR: " + data);
          if(window.localStorage["nodes"] !== undefined) {
            $scope.entries = JSON.parse(window.localStorage["nodes"]);
          }
      });
  };
})

$score and $http are both AngularJS objects. In $scope we initialise a function to 'GET' a $http object, the URL of which is the JSON output of the articles on my personal blog. $http allows two outcomes - success and error. Since 'nodes' is our default 'Root object name' in the views formatter in Drupal, we set $scope.nodes to data.nodes.

To ensure links are opened in the inAppBrowser, we simply install that Cordova plugin (Ionic is built on Cordova) by running this command from within our project:

cordova plugin add https://git-wip-us.apache.org/repos/asf/cordova-plugin-inappbrowser.git

Once this far, we can add the tab-news.html template. In that I have the following:



To loop through items in our list we perform an Angular 'repeat' using a key/value setup (in PHP this would be foreach($key as $value)). In the above example I used the word 'item' for my key in the $scope.nodes object, then telling the app that when we click a link, we browse to 'item.node.link' (which is a URL we have within our view in Drupal).

We then create JSON objects from the returned data using the titles that we gave each of the fields in above when creating the views_json view. I called my title field 'title' (no quotation marks) and that allows me to drilldown to  node.title; the body field is called node.summary.

The unstyled version of this section looks like this:

Ionic News Feed via JSON

This section of the tutorial is adapted from Nic Raboy's blog.

If you have any problem seeing your news posts, it may be because of a CORS issue (check the console warnings tab in Firefox). If this is the case, you will need to modify your .htaccess file or add a module such as the Drupal CORS module.

The code used in this app is available on GitHub.

Given that this was my first foray into app building, I'm sure you have plenty of tips for me. In that case, please add them in the comments. Thanks.

Nov 19 2015
Nov 19

Drupal 8, which we previously called "the most brilliantly amazing responsive accessible version of Drupal to be released so far", has just been released.

This is major news for three reasons.

  1. Drupal 6 will not be supported for very much longer. If you are running a Drupal 6 website, you will need to start migrating to Drupal 7 or Drupal 8 (or risk potentially being exposed to security vulnerabilities and loss of data).
  2. Drupal 8 comes with lots of great features built into its fabric. This will make it the most enjoyable Drupal ever for content editors.
  3. It will be the most advanced CMS on the market, bettering all open source and proprietary systems.

When you involve Annertech in your Drupal 8 projects, you will be in very capable hands as we are the only team in Ireland:

  • to have committed code to the Drupal 8 codebase
  • to have live Drupal 8 websites launched already
  • to have a member on the international Drupal Security Team, ensuring that your website's data is safe

When it comes to Drupal 8, we are as excited as we are experienced.

Your Project + Drupal 8 + Annertech = Success

Get in contact with us today to find out more.
 

Sep 24 2015
Sep 24

Céad míle fáilte go Baile Átha Cliath. DrupalCon is coming to Dublin. Yes, you read that right, DrupalCon 2016 will be in Dublin, and we at Annertech can't wait to see you there.

The Drupal Ireland community has been doing great work over the past few years - Drupal.ie was launched, Drupal Camp Dublin became Drupal Open Days Ireland, hundreds of Drupalists came to Drupal Dev Days in Dublin, DrupalCon Trivia Nights were organised and hosted in many cities, and now - at last - DrupalCon will be held in Dublin.

At DrupalCon Barcelona's closing session today, the Annertech team were present to hear and help out with the announcement, give a short presentation about all the great reasons to come to Dublin for DrupalCon, and celebrate with all the amazing people who attend DrupalCons. Judging by the atmosphere today, everyone is as excited as we are, everyone is coming to Dublin, and everyone is going to have "the craic". Will we see you there too?

If you have any questions that you'd like to ask about Drupal, Ireland, and/or DrupalCon in Dublin, don't be afraid to get in contact with us.

Sep 23 2015
Sep 23

Wow! What a day we had at DrupalCon Barcelona 2015. I know, personally, I had the best day i've ever had at a DrupalCon, attending a great keynote on web psychology, a talk that validated my thoughts on design in the browser, an awesome presentation on linked data and the semantic web, and that's without mentioning the BoFs on web apps versus websites and Twitter Bootstrap, and then ... oh man - that was a lot.

So, today's best bits:

Mark

I'm struggling to come up with my best moment of today given the amount of them. I think I'd probably choose the "interaction" idea of design in the browser - clients get to actually see how their websites will work, rather that just what they'll look like.

Stella

I passed the Acquia-certified backend developer exam. That was definitely the highlight of my day, though "beta-testing" the DrupalCon trivia night questions during dinner with the rest of the Annertech team was great fun.

Andrew

I had some great conversations about web accessibility before and after the session on "Inclusive Design", which has me really fired up for tomorrow's BoF on the same topic, hosted by me!

Gavin

I loved the design in the browser presentation, espeically how it spreads QA across the project, rather than tagging it on at the end.

Mike

Natalie Nahai's keynote was my highlight, it was really informative and the audience participation worked very well.

Anthony

I'm with Mike in finding the keynote on web pshychology as the best of the day. Really enjoyed Natalie's presentation style and the subtleties of how we use the web.

Tommy

I had to go home with a tummy bug. But thanks for bringing me biscuits!

Tomorrow is the final day of sessions and the DrupalCon trivia night. If you've never been to that, don't miss it.

Sep 22 2015
Sep 22

DrupalCon Barcelona. Day 2. The Annertech crew were up early (especially given our late night last night) and arrived at the convention centre. Here's our team's "best of the day" list - including one from Marta Paz, whom we've picked up as an honorary Annertechie for the week.

Mark
"I loved the talk by Tim Millwood and Dick Olsson about revisions in Drupal 8. We see a lot of tenders for large projects asking for an "audit trail" and the approach being taken with multiversions/revisions looks very, very promising."

Stella
"I liked the "Reducing Waste: Cut the Crap" session, because we implemented the blitz that was suggested at the start of projects very successfully at Annertech; it was great to have our theory validated."

Gavin
"My favourite session was "Mastering Twig". I realised there is a lot of Drupal 8 core that is not yet leveraging the greatness of Twig, and I'm looking forward to that changing."

Anthony
"I definitely like the "Reducing Waste: Cut the Crap" - I love the idea of sprints spikes; I'm convinced that a compressed timeline on a project will be to the project's benefit."

Andrew
"A big chunk of my day was taken up with the Acquia exam, though I certainly enjoyed putting my feet up afterwards at the Drupal 2020 Vision talk."

Mike
"My favourite session was also "Reducing Waste: Cut the Crap", an entertaining, enthusiastic, and knowledable presenter. (The worst thing was losing a tooth to a salad roll.)"

Martha
"MortenDK's talk on theming was my favourite. I like how the theme layer is disappearing and everything is going into Twig templates."

Congratulations to Andrew - our fifth Acquia-certified Drupal developer.

Sep 22 2015
Sep 22

The Annertech team descended on DrupalCon Barcelona on Monday. Sun on our faces, wind at our backs, day one saw us all getting busy. Mark and Andrew worked their way through some accessibility issues for Drupal 8 - writing patches, reviewing patches, and move issues along the queues. Stella attended the business summit. Tommy, Gavin, and Anthony all completed Acquia-certification exams.

The Acquia exams taken (and passed) means that Annertech is not just the only agency in Ireland with Acquia-certified Drupal developers, but that we are also the only agency to have passed all four exams. The day complete, we now stand at 4 Acquia-certified Drupalists.

Site Builder - Mark Conroy
Frontend Specialist - Gavin Hughes
Backend Specialist - Tommy Lynge-Jorgenson
Certified Developer - Anthony Lindsay

Tomorrow sees the start of the sessions and talks. Tune in then for our "best bits of the day".

Sep 07 2015
Sep 07

When building client sites that necessitate an e-commerce feature (a store or donations system for example), we use Drupal Commerce. We find it a very easy to use e-commerce portal that is fully integrated with all other aspects of the client's new website.

Annertech have built a large number of e-commerce stores using this system, some of which transact millions of Euro a year, such as for Oxfam Ireland, Trócaire, and Irish Cancer Society. This has enabled our clients to develop websites that, in essence, pay for themselves.

Here's our 10 benefits of the Drupal Commerce platform:

  • Free - Unlike the Magento and WordPress communities, the concept of "premium" plugins or modules that you have to pay for doesn't  exist in Drupal and so there are no hidden charges when you want to extend your Drupal Commerce shop with a new feature.
  • Extensible – Drupal Commerce is highly extensible, and can adapt to meet the changing needs of your website through integrations with third-party systems, feature enhancements, and international functionality.
  • Flexible - Drupal Commerce is especially good at selling physical products, complete with the ability to create variations of the same product, e.g. a single t-shirt product sold in multiple colours and sizes. However, it's just as easy to sell other types of products, such as digital content, recurring, tickets, subscriptions, etc. We are currently about to relaunch the Contemporary Music Centre website in Drupal which will use Drupal Commerce to sell music scores and other files.
  • Simple to manage - Manage orders, products, and customers through a consistent and intuitive interface that you can customize to fit your needs, workflows, and legacy systems.
  • Content driven – The Drupal Commerce platform is built upon the enterprise Drupal CMS, enabling it to connect content and products seamlessly to drive online sales and influence offline sales through a rich user experience, optimized merchandising tools, and proven SEO tools.
  • Supports multiple payment methods – Accept payment through multiple payment providers, including PayPal, Realex Payments, Stripe, SagePay and WorldPay. It's also possible for your customers to choose their preferred payment method from your predetermined list. This is something we've implemented on the Trócaire website which accepts payments via Realex Payments and PayPal.
  • Flexible shipping rules – Using Drupal Commerce you can define your own rules on how, which products and where to apply shipping charges, including flat rate shipping and weight based shipping.
  • Handle multiple currencies - A number of websites we built presently work in a dual currency manner, such as Oxfam Ireland and Trocaire.org. Both of these websites allow for transactions to happen in Euro (€) and Sterling (£). Adding additional currencies will be a matter of extending how this functionality works, though in the same manner as it presently does.
  • PCI Compliant - Drupal Commerce is fully PCI compliant and we make sure that no credit card details are ever stored on our clients' servers. So, should hackers wish to gain access to a client database, they will never gain access to credit card details that would allow them to defraud any of their customers.
  • Well documented - Drupal Commerce is very well documented on the Drupal Commerce website, making it very easy to imagine solutions for complex commerce functions.

We do our best to contribute as much code to Drupal as possible. Within the sphere of Drupal Commerce, we have contributed a number of modules to Drupal that extend/enhance Drupal Commerce, such as Stella Power's Commerce Donate module, Mark Conroy's Commerce Views module, and more. As well as this, we are the agency that Realex Payments has tasked with developing the module to allow Drupal to integrate with the Realex Payments gateway, supporting both Realex Redirect and Realex Remote, with or without 3D Secure.

So, if you want seamless integraton between your content and your commerce (and even your CRM), why not give us a call today on 01 524 0312 or drop us an email at [email protected] and let's build a website that will pay for itself.
 

Aug 17 2015
Aug 17

We recommend using Drupal as a content management system platform for our client projects for many reasons, not least of which is that it is a widely adopted, free, open source solution. Here are some of the strengths that we see our clients benefiting from when they use the Drupal content management system.

1) Open source

As an open source platform, Drupal is free to use, free to modify and free to distribute. There are no licence fees and no vendor lock-ins. You have complete control over your site/codebase and, given the large number of Drupal developers out there, you have the freedom to switch between vendors as needed (if you are looking for a new Drupal agency to service your needs, talk to Annertech).

We love the freedom this gives to our clients. It means they can come to us with a Drupal project developed by another agency, or they are free to take our work to another agency.  You only need to work with agencies that you trust and enjoy working with.

2) Flexible and extensible

There are thousands of freely available extensions (called modules) to the core Drupal platform, which can provide all manner of additional functionality to your website, from shopping carts to advanced social media integration to integration with back-office CRM systems.

If for some reason you can't find an extension to deliver what you want, you can always hire us to create it for you. You can see some of the modules Annertech develops/supports here.

3) Secure

Drupal is seen as one of the most secure of the open source solutions available, with dedicated release slots scheduled for security updates, so developers know when to expect an update and can best place themselves to apply these patches as soon as they are available.

It is backed by a team of security professionals who make up the security team, including Annertech's Stella Power.

4) Scalable

Drupal scales effortlessly and is stable even when serving thousands of users simultaneously. For example, The Economist website, built with Drupal, has over 3 million registered users and 30 million page views per month.

Building large-scale CMSs, often with interactions to other systems and APIs, is our speciality.

5) Innovative

An award-winning platform is the best platform to build award-winning sites with. It is highly innovative and is constantly being worked on and extended by thousands of Drupal developers around the world. It is a best in class solution for content management.

Annertech is proud to be the leading team of this innovation in Ireland.

6) Proven

Drupal powers some of the busiest and highest profile websites for the biggest organisations and brands globally, including the White House, the Grammy Awards, Nike, Amnesty International and The Economist. Drupal is a mature product with a large user base. Started in 2001 and in the top three most popular platforms, Drupal is currently downloaded approximately 150,000 times per month.

We at Annertech have proven ourselves over and over again to be the choice when it comes to proven technology.

Due to the reasons outlined above, we believe Drupal will provides our clients with a high level of business security in their content management investment.

If you want to discuss Annertech helping you build an award-winning website using Drupal, please feel free to contact us by phone on 01 524 0312, by email at [email protected], or using our contact form.

Jul 20 2015
Jul 20

With only 5 critical issues marked as "needs work", Drupal 8 - the most brilliantly amazing responsive accessible version of Drupal to be released so far - is just around the corner (we're so excited, we forgot to put commas in that list of adjectives). Last week Acquia announced they now have Drupal 8 available on their platform for clients to start building their D8 sites on. This announcement is a very important one, and a signal that we must all get very serious about planning upgrades from Drupal 6 to either Drupal 7 or 8 sooner rather than later.

What's going to be so great about Drupal 8?

  • Mobile First: Drupal 8 is built with a mobile first approach for both backend and frontend, meaning mobile content editors and mobile content consumers are both equally provided for.
  • Easier Authoring: Drupal 7 made huge gains on Drupal 6 for content editing. Drupal 8 takes this to a new level.
  • Accessibility: Drupal 7 is quite accessible and can be perfectly accessible with a little work. Drupal 8 takes accessibiilty as a core value.
  • Enterprise Ready: Drupal 8 is designed with enterprise in mind, though it can also be used for smaller websites, there will be no question about its ability to handle large scale projects.
  • Multilingual: Massive changes to how multilingual requirements are met, which is hugely important for Irish-based (government) websites which usually need to be available in Irish and English.
  • Performance: Huge caching improvements to ensure that your web page is served to your users as quickly as possible.
  • RESTful: Ability for content to be Created Once, Published Everywhere (COPE) is much greater in D8, allowing you to publish your content in multiple formats on multiple platforms and apps.

We're ready for Drupal 8. Are you? If not, let us help you.

I want to talk about Drupal 8

Jun 22 2015
Jun 22

We used to think we didn't have a content strategy, but we did. It went like this: we blog when we think of it; we tweet when we are at an event; we send out a newsletter every now and then; we have a Facebook page with 4 likes and no posts. It doesn't sound like a winning strategy, and it's not. So, lesson one: not having a content strategy is itself a content strategy (albeit a very poor one). Were we at the top of Google then? As it happens, we often were. The reason being that we are Ireland's longest established Drupal web design agency, very well known in Ireland and Europe for our Drupal services, and no body else in the Drupal community in Ireland was doing much in the way of planned content strategy.

What changed

We made two drastic changes:

  1.  We redesigned our website and built it in Drupal 8 (it remains the only Drupal 8 website in Ireland), and
  2. We used the redesign as an opportunity to evaluate and re-write our content and also formalise a strategy for it.

Developing our content strategy

Last October, the content team met for a full day's discussion about the state of our content offerings, asking ourselves such questions as:

  • What do we consider content?
  • Is social media (tweets, statuses, etc) considered content?
  • Is an image attached to a blog post content?
  • Where is all our content collected, itemised, and systematised?
  • Who looks after it?
  • What are our analytics telling us - visitors, sessions, bounce rates, etc?
  • What are our short term, medium term, and long term aims for content?

Once we had answered all of these (and many, many more), we set about formulating a plan for our content: what are we going to publish, when are we going to publish it, who has authority to create content on the website, who has authority to publish that content, what's our social media plan, etc. I won't go into our full strategy for fear of losing the family jewels, but I will give a flavour of our blogging strategy. We decided to publish one blog post per week, on a Monday morning at 10:30 in an effort to aim for consistency. All blog posts must:

  • have a link to an internal page on our website (often a call to action towards one of our services pages)
  • have a link to an external website (such as to a Drupal module that we mention in the post)
  • have an image (we create these ourselves to make sure they are relevant to the post and to avoid the garishness of stock photography)
  • have a call to action
  • fulfill at least one Annertech content aim
  • be verified by an Annertech content team lead member
  • deal with one topic
  • have all metadata fields completed
  • have SEO-rich titles or else be very attention-grabbing
  • etc

What does success look like?

Before engaging in this process, we were quite ad hoc about content creation, maintenance, and governance. Though we were number one on Google for a number of terms, our search engine ranking was slipping. The number of hits on our website was quite low (who wants to read about web design services in Ireland?).

Here's a snippet from a Google Analytics report from this time last year:

Annertech Google Analytics May 2014

And here's the same snippet from this year, which certainly looks healthier:

Annertech Google Analytics May 2015

Though the second image looks healthier on face value, it's very hard to tell without some context. So here's both reports compared against each other - as you can see, our website's least busy days these days is way more busy than our busiest days a year ago.

Annertech Google Analytics May 2014 - May 2015

Finally, here's a snippet from the same report in Google Analytics displayed over a full year. Can you see where we started getting as serious about our own content strategy as we are about our clients' content strategy? That's right, October 2014.

Annertech Google Analytics May 2014 to June 2015


The spikes in this graph roughly correspond to the days when we publish a blog post. Some get more hits than others naturally, but without fail, each day we publish a blog post (once a week) we get a lot more hits on our website than the days we don't. We'd like to have the spikes not so spikey, but don't have the resources to publish a blog post every day just yet.

Getting these kinds of hits on our website also meant a much increased social media following and reach and better search engine rankings for some other key words - not exactly number one on Google, but faring better than we had been and on our way to the top. With these benefits, some of our medium term content strategy goals were met within the short term timeframe and some of our long term goals within our medium term timeframe.

Bounce Rate

What we most liked about this was the reduction in our bounce rate (the percentage of people who leave your website after looking at only one page). Before we began this process we had a bounce rate of about 27%, which is quite good for our industry. It meant that 73 out of every hundred visitors clicked on at least one more page on our website. It's now down to a little under 3% - so about 97% of our site visitors read at least two pages of our website.

What was our plan for decreasing our bounce rate? Let's just say, we're trying to COPE and we'll go into more detail in a future blog post. Stay tuned.

I'm going to wrap up this article here by reinforcing an earlier thought: not having a content strategy is itself a content strategy.

If you'd like to talk to me or another Annertechie about your content strategy, feel free to email us at [email protected] or give us a call on +353 (0)1 524 0312. We don't bite!

May 28 2015
May 28

We are not aware of ever meeting a client who doesn't want to rank high on SERPs (Search Engine Results Pages), but it's easier to request this than to implement it. Reason being, as we tell clients, we don't own Google; it sets its own algorithms for ranking and indexing content, and these can change on Google's whims. The solution: we do our very best with what is in our control.

What's in our control? The design and development of the website, including the CMS (Content Management System) that we use and the extensions to this system. We use Drupal almost exclusively for our web development work, whose default settings are quite well optimised for SEO. We then supplement this with a fleet of contributed extensions (modules) to enhance the SEO of the websites. Here's our Top 10 Drupal modules for helping SEO.

1) Metatag

This is the big gun for SEO in Drupal. Metatag module, created by Dave "he's created a module for that" Reid, allows site editors to set "global" metatags which will automatically set things like page title and description and/or custom metatags on a per page basis. Sub modules of this allow you to set metadata for things like Twitter Cards, Facebook Open Graph, Google Authorship and all the Dublin Core attributes. It's a huge module and deserves it's status as number one on our list.

2) Page Title

The page title is hugely important for SEO - this is not necessarily the title that users see such as "Top Ten Drupal Modules for SEO", but the machine title that search engines read, such as "Annertech | Web Design Agency Dublin | Top Ten Drupal Modules for SEO". Page Title module lets you set these titles with your own set formulas per content type (e.g. all news posts, all events posts) or on a page-by-page basis.

3) Pathauto

Pathauto is the fourth most popular Drupal module. It allows you to use "tokens" to dynamically set human readable URLs for your pages. This means instead of a default Drupal path such as www.annertech.com/node/1 you can have a path such as https://www.annertech.com/blog/drupal-top-10-seo-modules.

4) XML Sitemap

To help Google, Bing and other search engines index your content, you can submit a sitemap to them which will list all of the pages on your website. With the XML Sitemap module, the sitemap is automatically created in an XML format, submitted to search engines, and then re-submitted anytime there is a change in your content. You can also use it to rank certain site sections higher than others - you might want your e-commerce product pages to have more weight/rank higher than your privacy policy pages.

5) Honeypot

Spam is the bane of the web world. If your website is getting cluttered with spam it will turn your visitors off. If the spam is full of links to low grade websites, you may lose SEO rankings. Honeypot is our preferred solution for blocking automated spam on a website.

Want to read about our "5 best modules to eliminate spam on a Drupal website"?

6) Google Analytics

To analyse how many visitors your site is getting, where they are coming from, what they do on your website, you probably use Google Analytics. The Google Analytics module for Drupal allows you to set what pages/content types, file downloads, links and whole host of other options are tracked by your GA account.

7) Site Verification

In order for your website to use services like Google Webmaster Tools and Google Analytics you need to verify your site with Google - i.e. prove that you have admin access to it. This makes sure that you can't track a competitor's website. The easy way to do this is through the Site Verification module which allows you to either add a verification metatag or upload a verification file.

8) Link Checker

If your website contains broken links (i.e. a link that does not work) your SEO ranking is going to go down. The Link Checker module will scan your website for you and let you know if there are any broken links so you can fix them.

9) Content Optimizer

Since Google says "Content is King" you want to make sure your content is optimsed for SERPs. The Content Optimizer module will scan your content and give you feedback on how optimized it is for search rankings and suggestions for improvement.

10) Redirect

The redirect module (another Dave Reid creation) lets you redirect one page to another. For example, your last website may have had an "About Us" page at www.annertech.com/about-us and your present website might have an "About Us" page at www.annertech.com/about. If people visit the former then they'll get a 404 error ("Page not found"). Using the redirect module you can stipulate that anyone landing on the former gets redirected to the latter. Since Drupal gives every page a "node id" - www.annertech.com/node/1 - you can remove the duplicate URL so the node id version of each URL will redirect to the pathauto version instead.

11) SEO Checklist

We thought we'd chuck in one more for good measure. The SEO Checklist module is a simple list within your CMS of all the things you should do to help your SEO - such as enable the modules listed above. It's a handy way of keeping check on what's been done, what needs to be done, and what you haven't even considered just yet.

So, that's our short 10 Drupal Modules to help increase SEO. What have we left out? Let us know in the comments.

May 26 2015
May 26

You know the way you design a beautiful website, but the back end edit page is long, and ugly, and hard to follow, and ... well, let's fix that mess so website end users and content editors both have a great user experience.

This blog post is based on a talk I gave recently at Drupal Open Days Ireland 2015 held in the Guinness Enterprise Centre in Dublin last week. The genesis of the talk came from my observation that web developers often presume that the "end user" of their product is the person who visits the website to make a purchase or perform an action. My contention is that the content editor is the end user of the web developers and the site visitor is the end user of the client. It's not that simple of course, but the bluntness will do to allow us to get the conversation started.

If we accept this theory, then surely we should put as much effort into the user experience (UX) of the content editor as we do into the finished front end of the website. I met with a potential client recently who told me their website (not built on Drupal) is not very good "because it's not updated enough; it's not updated enough because it's hard to use". This organisation is losing money, losing site visitors, losing SEO, and ultimately spending more time publishing to other platforms all because the editor experience is not up to standard for them.

When using Drupal, there are a lot of things we can do to make the editor experience more enjoyable - lots of small things that can in aggregate add up to a much more pleasant user experience for the content editor. Here are some of them:

Admin Theme

Drupal 7 ships with the Seven admin theme. We find this very good and enable it for content editors on all of our websites. Ember and Adminimal are two other Drupal admin themes. We gave Ember an extensive test but found it lacking. We are quite impressed with Adminimal (which is like an enhanced version of Seven), but haven't come to a definite conclusion on whether we prefer it over seven. Using Seven versus Adminimal will give you buttons like this:

Drupal's Seven and Adminimal theme's buttons

Create Shortcuts

In general I don't like the Toolbar and Shortcuts menus. Since I usually need quick acess to lots of links I like to use the Admin Menu module. However, as a content editor, the Shortcut menu is a great option. On this website, I've created links for creating content, finding content, checking unapproved comments, and clearing the cache.

Add shortcuts for your editors to easily execute common tasks.

WYSIWYG

Though as developers we might like the wysiwyg to die, the simple fact is that clients want them. I actually think they are right to want them. I see nothing wrong with a client wanting to put some text in bold, or italics, or bullet points. My advice when it comes to wysiwygs is that less is more. In general I aim to give no more than 6 buttons on a wysiwyg - bold, italics, number list, bullet list, link, and unlink. You'll notice headings is not in that list (H1, H2, H3, H4, H5, H6). The reason being, I have found clients sometimes lack a knowledge of semantic data and will use headings for styling - as in, if they want something about 20 pixels high, they might use H3. To counteract this, we use field collections for paragraph types with all the attendant fields they might need, heading, text, media, etc (media sets we call them). We are starting to experiment with the Drupal paragraphs module at the moment.

wysiwyg - bold, italics, number list, bullet list, link, unlink buttons

Big Long Forms = no no

Bryan Braun had a great blog post a while back If Gmail were made by Drupal. In it he showed a GMail screen and then rebuilt that screen in Drupal. Suffice to say, it was a long form. For my presentation I created a content type called "Big Long Form" with text fields, image fields, taxonomy fields, and file fields. It wasn't overly long, but when showing how it worked and trying to remember what was where it became clear very quickly that long (undocumented) forms are not sustainable for the content editor. How to fix this?

Short, tabbed forms = go go

As a matter of course, when building Drupal websites, I install the Field Group module. This allows me to put form fields into groups - all text fields in one group, all taxonomy fields in another, all media fields in a third, or whatever categorisation system I wish. Taking this approach, the content editor is not overwhelmed with options and can simply click on the tab of the category he or she wishes to edit. The field group tab I most commonly use for this is the wonderful Vertical Tabs.

Drupal field group vertical tabs

Now, doesn't that form look much easier to manage? Well yes and no. Yes it's easier to manage, but the content editor might have too many tabs now, perhaps we don't want them being able to edit menu items or change the URL alias. Can't we simplify this?

Simplify things

Using Drupal's Simplify module we can, well, simplify things. In this instance, I am going to remove the admin-related tabs from the editor role, so they will only see content-related tabs.

Using Drupal's Simplify module to remove admin tabs from content editors

Not just random Acts of Kindness

Be nice to your content editors. Provide them with help text. Not just randomly, but on all form elements. For example, on an image field, let them know that the expected dimensions of the image are 450px by 220px and that the image will appear on the news listing page.

Adding help text to image fields in Drupal improves the content editor experience

(Excuse the title on that image field - it was just for demonstration purposes.)

Beautify the help

Once you have all of your help texts in place, the form will become a little longer. This isn't necessarily a good thing. I like to install the Beauty Tips module to insert the help text in popup bubbles, visible only when the user clicks on that field. It also allows me to write slightly longer help texts for my clients.

Place help text in pop up bubbles to save screen space.

Selecting from a large range of options

I once created an Organic Groups-based website with 2,500 groups. Every time a new feature was created for a group, we had to decide which groups were ready for this new feature. We then had to try to select the groups from a tiny input/select box trying to grab, for example, 179 groups of 2500. To say my finger often slipped off the mouse, or missed a group, is an understatement. With Drupal's Multiselect module all of this hassle could have been avoided. Multiselect allows editors to select available list items and then tick an arrow to send them to the selected options list and vice versa.

Add Drupal's Multiselect widget for easier selecting from large lists.

Making the link

The content editor often has trouble with links. Finding pages, linking to them, then editing the linked page (resulting perhaps in a change of URL), but forgetting to edit the page that links to it and then ... (it's all getting complicated). Using LinkIt module, editors are given a much better link interface to find the content they wish to link to, which will also automatically update the links if they change. Add to that the Link Checker module and you've a pretty cool link infrastructure in place.

Using Linkit module to more easily create links in Drupal CMS

Dashboards

Once you have your content editor experience created for editing pages, don't forget to create a dashboard for your content editors to give them an overview of the website. This can be something simple using the Dashboard module or more complex using Workbench and Workbench Moderation modules. It will depend on the workflows in place in your clients organisations. At a minimum - with my content strategist hat on - I create blocks of most recently added/updated content, least recently added/updated content, content due for review, and unapproved comments.

That was as far as my presentation got. I'll follow up this blog post with another one soon detailing some other modules that I mentioned in passing during the presentation, such as admin views, honeypot, webform default fields, conditional fields, paragraph module, field collection, and more.

Any thoughts? Anything left out (I'm sure there's loads more)? Please add them to the comments.

(slides for presentation can be found here.)

May 06 2015
May 06

Drupal Open Days - the largest meeting of Drupal developers, users, and enthusiasts in Ireland - is fast approaching. This year is looking like it's going to be the biggest and best one yet.

Biggest - checkout who is coming

Best - checkout the great line up of speakers

Wondering if you should come along? The answer is yes. It'll be two great days of talks, workshops, informal discussions, and meeting up with old and new friends. And it's free. And we'll give you lunch on both days. And finger food at the social events. What more could you ask for? Okay so, I'll buy you your first pint on Friday evening!

Have you registered? If not, do so here now.

As always, Annertech are Gold sponsors of the event. We are delighted to once more provide our assistance to the Drupal Ireland community to help spread the word, get more people involved, continue to make Drupal the best platform for Content Management Systems possible. We'll also be giving three talks over the two days.

The whole Annertech team will be present, so if you have any questions about any aspect of Drupal (or web development in general) be sure to chat with us.

Apr 27 2015
Apr 27

We love to share our knowledge. At every Drupal camp and Drupal Open Days in Ireland (not to mention most DrupalCons and DevDays internationally) we give presentations. This year we are giving three talks at Drupal Open Days Ireland 2015. Here's what we'll talk about:

Alan Burke: Doing the post-launch dance

You got the project live. It was on time. It was under budget. You did the post-launch dance. Now ... it's time to support that badboy. That great client, who now has a great website, wants some more great features (and that thing you thought was working, no longer is).

Here's the art and science of successful support.

Read about our Drupal Advice and Support | View event notice

Mark Conroy: The content editor deserves an easy life

You know how it is. You design a beautiful website (and the site visitors love it), but the backend edit page is long, and ugly, and hard to follow, and ...?

As developers, we often forget that our end users are the website editors. Their end users are the site visitors. Well, let's fix this mess so that website visitors and content editors both have the time of their lives.

Read about our Content Strategy Service | View event notice

Stella Power: Building a CRM into your Drupal website

You've heard of SalesForce, and Microsoft Dynamics, CiviCRM, and a whole host of other CRM systems that can plug into your Drupal website, haven't you?

Yes? Well, have you ever thought of building a CRM within your Drupal website, using Drupal contributed modules, entities, and fields? It's a great solution for small- to medium-sized enterprises that want to keep control of all of their data but can't afford the price of commercial CRMs.

In this presentation, we'll walk you through the steps needed to create a CRM using Drupal 7 and RedHen.

Read about our CRM Solutions | View event notice

===

And if hearing our pearls of wisdom isn't enough, there is a whole host of other great talks going on, not least the keynote "Managing Projects the Drupal Way" by Emma Jane Westby.

Will we see you there? Let us know in the comments if you're coming and any suggestions you might have for our talks.

Pages

About Drupal Sun

Drupal Sun is an Evolving Web project. It allows you to:

  • Do full-text search on all the articles in Drupal Planet (thanks to Apache Solr)
  • Facet based on tags, author, or feed
  • Flip through articles quickly (with j/k or arrow keys) to find what you're interested in
  • View the entire article text inline, or in the context of the site where it was created

See the blog post at Evolving Web

Evolving Web