Appnovation Technologies: Drupal Website Accessibility, Part 1: The problem, and why it matters…

Planet Drupal - 10 November 2017 - 12:00am
Drupal Website Accessibility, Part 1: The problem, and why it matters… Drupal Website Accessibility, Part 1: The problem, and why it matters… "The power of the Web is in its universality.  Access by everyone regardless of disability is an essential aspect." - Sir Tim Berners-Lee, W3C, Director and Inventor of the World Wide Web In the coming weeks, I’ll be taking a look into one...
Categories: Drupal

Red Route: Knowledge Is Dead, Long Live Learning

Planet Drupal - 9 November 2017 - 10:22pm

This article was originally posted on the Capgemini Engineering blog

There's a certain inescapable truth that people who work with technology need to face. As time goes by, the knowledge we’ve gained almost inevitably becomes obsolete. If we specialise in something, how do we deal with the fact that our specialism, which may even have been cutting edge technology that we were pioneering, eventually becomes a legacy system? As Ellen Ullman put it, "The corollary of constant change is ignorance ... we computer experts barely know what we are doing."

Front end developers are very familiar with this feeling, confronted so frequently with the dizzying pace of change in the world of JavaScript frameworks. Once upon a time, I was very proud of my ability to make CSS layouts work in IE7. Now all those tricks and hacks are little more than worthless trivia, perhaps less valuable than actual trivia. At least knowing who scored the winner in the 1973 FA Cup final might help in a pub quiz - I can't imagine that being able to prefix properties with an asterisk will ever come in handy, but it's taking up storage space in my brain. Now that CSS grid is becoming widespread, everything I've learned about floats (and even flexbox) is becoming less and less useful. There are even some people (although I'm not one of them) who would say that CSS itself no longer has value. Similarly, jQuery is already on its way to joining YUI and MooTools in the graveyard of things I used to know about, and experienced members of the Drupal community have recently been coming to terms with the fact that in order for the technology to progress, we'll have to unlearn some of our old ways.

It isn't just true for technology. London taxi drivers are finding that their hard-earned Knowledge is being made obsolete by satnav, and before too long, the skill of driving will itself have gone the way of basket weaving or being able to pilot a horse-drawn buggy - something that might still be interesting for the enthusiast, but isn’t relevant to most people’s lives.

Confronted with the unpleasant reality that our hard-learned skills are becoming outdated, what's the appropriate response? Do we follow the example of the Luddites and rage against the evolution of the machines? It's easy to fall victim to the sunk costs fallacy, and ego provides a strong temptation to hang on to our guru status, even if we're experts in an area that is no longer useful. If you're a big fish in a shrinking pond, you may need to be careful that your pond doesn't dry up entirely. Besides, do you really want to work on legacy systems? Having said that, if your legacy system is still mission-critical somewhere, and migrating away would be a big job, there's good money to be made - just ask the people working on COBOL.

I think there's a healthier way of looking at this. With the internet acting as a repository of knowledge, and calculators at our fingertips, education is evolving. There's no longer much value in memorising times tables, or knowing the date of the battle of Culloden. As my colleague Sarah Saunders has written, you're never too old to learn, but the value of learning things is greater than the value of the facts or skills that we learn - the meta-skill of learning is the really useful thing. Then again, I would say that, having done a philosophy degree.

For example, the time and effort I put into learning French and German at school doesn’t currently seem like a worthwhile investment, when I think about how frequently I use those languages. But I would never say that it was a waste of time. When I lived in Tokyo, having learned other languages definitely helped when it came to learning Japanese. Then again, these days I don’t often spend any time in Japan or with Japanese people, so the current value of that effort seems low. But do I regret spending that effort? Not a bit. It helped me to make the most of my life in Japan, and besides, it was interesting.

Two of the most compelling conference talks I've heard in the last few years touched on this theme from different directions. Andrew Clarke and Patrick Yua both emphasised the importance of focussing on the underlying principles, rather than chasing whatever the current new hotness might be. Designers and developers can learn something from Yves Saint Laurent: "Fashions fade, style is eternal".

We need to recognise that things will always keep changing. Perhaps we could help ourselves to acknowledge the impermanence of our skills by saying some kind of ceremonial goodbye to them. I have an absurd vision of a Viking funeral, where a blazing longboat sails away full of old O'Reilly books. We may not need to go that far, but we do need to remind ourselves that what we've learned has served us well, even if that knowledge is no longer directly applicable. A knowledge funeral could be an opportunity to mourn for the passing of a skill into obsolescence, and to celebrate the value of learning.

Image source: wikimedia

Tags:  learning development psychology Capgemini Drupal All tags
Categories: Drupal

Morpht: Announcing Entity Class Formatter for Drupal 8

Planet Drupal - 9 November 2017 - 7:06pm

The Entity Class Formatter is a nifty little module which allows editors to place classes on to entities, allowing their look and feel to be altered in the theme layer or with other modules such as Look and Modifiers. It is now available for Drupal 8.

Entity Class Modifier is a humble little module, however, it does open up a lot of possibilities. The most obvious is to use the theme layer to provide styles for the class which has been applied. This makes it possible for the “designer” at design time to can some different styles to pick from. It is however, possible to use the module in a more flexible way and combine it with Modifiers and Looks.

Once a class has been defined and added to a field, a “Look Mapping” can be defined, associating the class with a set of Modifiers. The site builder or skilled editor can then go in and define any number of Modifiers which will be fired with the class.

For example - a “my-awesome-class” class could be created which is wired into a “field_my_awesome” set of Modifiers. The Modifiers could include a blue linear gradient with white text overlay with generous padding. All of this configuration happens in the UI after deploy. It is a very flexible and powerful system. The system can be configured after deployment and adapted to the styles you wish to apply.

Basic use of Entity Class Formatter

The use of the module is very easy. We can for example define our own class on the article.

The first thing we need to do is to enable the module. Once installation is complete we can go and add our custom field. In this little tutorial we will basically add the class onto the article content type. So go to Structure > Content types > Article > Manage fields and add new text field. We can name the field simply "Class" and save it. As we keep everything in default we can save it on the next page too.


Now the last thing we need to do to make it work is set the Entity Class on the field in Manage display page. Go to Structure > Content types > Article > Manage display and change the format to "Entity Class". There's no need to any other manipulation with field because it won't render any values which would be visible to the visitor of the page.


That's it! No we can go to create an article (Content > Add content > Article). Input class to our field...

... voila, class is there!

Similar but different

There are a couple of modules out there which are similar but are different enough for them not to be totally suited to our requirements.

Classy Paragraphs, available in Drupal 8, has been influential in the Paragraphs ecosystem and has opened the way for creative designs. It was intended to apply to Paragraphs only and is quite structured in the way classes are applied through a custom field type. The Entity Class Formatter module is more flexible in that it has been designed to apply to all entity types. It can also handle a variety of field types (text, select lists, entity references) and is able to adapt to the data at hand. So, Entity Class Formatter has a similar aim - it is just somewhat more generic.

Field Formatter CSS Class, available in Drupal 7, also uses a field formatter approach to applying the class to the entity. It does have more complexity than this module because it deals with several layers of nesting. The Entity Class Formatter is very simple and only applies to the parent entity of the field.

Entity Class Formatter was inspired by Classy Paragraphs (thanks) and is supported by the team at Morpht.
Categories: Drupal

Leaflet Ajax Features

New Drupal Modules - 9 November 2017 - 6:54pm

The Leaflet Ajax Features module provides the ability to load the features for a Leaflet field or View (through the use of a sub-module) via AJAX, displaying a loading screen while the request is in progress. This is helpful for large datasets.

Leaflet Ajax Features
This is the main module which provides the base functionality and a field formatter for loading a fields data onto a Leaflet using AJAX.

Categories: Drupal Blog: AGILEDROP: Drupal con Vienna’ session about business

Planet Drupal - 9 November 2017 - 5:11pm
Nowadays business in a complex and dynamic environment. Because of its uncertainness, it's never too late to listen to a good lecture. If you have missed any session from DrupalCon Vienna, let us highlight some of them to you.    Co-operative Drupal: Growth & Sustainability through Worker Ownership Finn Lewis, Technical Director of Agile Collective Ltd   There is an increasing number of worker-owned Drupal companies. So there are more and more sectors looking for effective and customizable software solutions, so it's a good time to start or grow Drupal's business, which is not… READ MORE
Categories: Drupal

Game Nite Magazine Issue 18 Now Available

Tabletop Gaming News - 9 November 2017 - 3:00pm
So, some of us have a 3-day weekend coming up. What are you going to do to fill that whole time up with gaming? I suggest grabbing a gaming magazine to help out. It also just so happens that Game Nite Magazine issue 18 is now available. That should help. And also, the publication is […]
Categories: Game Theory & Design

Corvus Belli Previews Skills and Special Effects in Aristeia

Tabletop Gaming News - 9 November 2017 - 2:00pm
Some of you have your pre-order already in for Aristeia, the new fantasy sports game coming from Corvus Belli. But we still don’t know everything about the game. In their continuing preview series, this time we get a look at Skills and Special Effects in the game. And I don’t mean CGI. From the post: […]
Categories: Game Theory & Design

Nightingale Games running War Room Board Game Kickstarter

Tabletop Gaming News - 9 November 2017 - 1:00pm
Axis & Allies. I’m sure that just mentioning that game brought up memories for many of you. Great games had with friends, and such. Well, Larry Harris, who was the creator of the original game, has been working with Nightingale Games to come up with a new game. It’s been in development for 4 years […]
Categories: Game Theory & Design

EA CEO: It's only a matter of time before games embrace subscription services

Social/Online Games - Gamasutra - 9 November 2017 - 12:37pm

Evolving tech and the rise of subscription-based services could change how EA handles its annual titles like Madden NFL and FIFA. ...

Categories: Game Theory & Design

Acquia Developer Center Blog: Optional Config Weirdness in Drupal 8

Planet Drupal - 9 November 2017 - 12:24pm

Ah, the config system. Crown jewel of Drupal 8, amirite?

Well, yeah, it’s fantastic and flexible (as is most of Drupal). But if you have advanced use cases — such as building a system that alters config dynamically — there are traps you should know about.

Tags: acquia drupal planet
Categories: Drupal

Mars Open: Tabletop Golf Up On Kickstarter

Tabletop Gaming News - 9 November 2017 - 12:00pm
My grandfather used to love golf. He’d regularly play rounds late into his retirement. It was also a good bet that golf would be on TV when we went to visit. However, it was all Earth-bound golf. If you’d like a bit more outer-space feel, you should check out Mars Open: Tabletop Golf, a dexterity-based […]
Categories: Game Theory & Design

Thursday Terrain Corner

Tabletop Gaming News - 9 November 2017 - 11:00am
It’s Thursday, but it also kinda feels like a Friday. Reason being that tomorrow’s posts will be made from home in the morning before taking the rest of the day off. So I’ve got that going for me. Hopefully gonna help a friend put together some Guild Ball models and just hang out. Might even […]
Categories: Game Theory & Design

Stanford Web Services Blog: BADCamp 2017: Caryl’s Training Recap

Planet Drupal - 9 November 2017 - 10:14am

BADCamp is a delightful mix of networking and educational opportunities. Along with connecting with former acquaintances and meeting new people, I attended two really informative trainings. Here’s my recap:

Categories: Drupal

First Wave of November Releases Available From Privateer Press

Tabletop Gaming News - 9 November 2017 - 10:00am
The first set of releases for the month are available now from Privateer Press. And it’s kind of a nice transition between the two themes. You’ve got Cygnar on one side and Trollkin on the other. Meeting in the middle is the Trencher Express Team, which is a Trollkin and a Trencher working together. Too […]
Categories: Game Theory & Design

Acquia Lightning Blog: Optional config weirdness in Drupal 8

Planet Drupal - 9 November 2017 - 9:55am
Optional config weirdness in Drupal 8 phenaproxima Thu, 11/09/2017 - 12:55

This post was originally published on Medium.

Ah, the config system. Crown jewel of Drupal 8, amirite?

Well, yeah, it’s fantastic and flexible (as is most of Drupal). But if you have advanced use cases — such as building a system that alters config dynamically — there are traps you should know about.

Config is normally a fairly static thing. Your module/theme/profile (“extension” from here on out) has some configuration in its config/install sub-directory, and when the extension is installed, that config is imported. Once it’s imported, that config is owned by your site and you can change it in any way you see fit.

That’s the simplest, and most common, use case in a nutshell. Let’s talk about some other ones.

Optional config

In some extensions’ config directory, you will see an ‘optional’ directory alongside ‘install’. If you look in there, you see…some YAML files. What’s all this, then?

Optional config is normal config, but it’s treated differently. When an extension is installed, each piece of optional config it provides is analyzed, then imported only if all of its dependencies are fulfilled. A piece of config can declare, for example, that it depends on a view called ‘content’. That’d be expressed thusly in code:

dependencies: config: - views.view.content

If that piece of config is optional, then it will only be imported if, well, a view called ‘content’ exists in the system. That view might have been shipped with another extension, or maybe you created it manually. It makes no difference. As long as a view called ‘content’ is present, any optional config that depends on it will be imported as well.

Neat, yes? This comes in quite handy for something like Lightning, which allows you to create an install profile which “extends” Lightning, yet only installs some of Lightning’s components. Optional config allows us to ship config that might be imported, depending on what parts of Lightning you have chosen to install. Hooray for flexibility!

Optional config whilst installing Drupal

But wait, there’s more.

When you’re doing a full site installation (i.e., install.php or drush site-install), optional config is treated a little bit differently. In such a case, all extensions are installed as normal, but their optional config is ignored initially. Then, at the end of the installation process1, once all extensions are installed (and their default config has been imported), all2 the optional config is imported in a single batch.

I don’t think this is documented anywhere, but it can have major ramifications. Consider this piece of code — let’s say it’s part of a module called fubar, which provides some default config and some optional config. This hook will be invoked while fubar is being installed, but after its default config has been imported:

<?php /** * Implements hook_install(). */ function fubar_install() { $view = entity_load('view', 'fubar_view'); $view->setDescription('The force will be with you, always.'); $view->save(); }

fubar_view is optional config, so will entity_load() return a view entity, or will it return NULL? What do you think?

The maddening answer is it depends. It depends on when fubar is being installed. If Drupal is already installed, and you’re just adding fubar to your site, then $view will be a view entity, because the optional config will be imported before hook_install() is invoked. But if you’re installing fubar as part of a full site install — as part of an installation profile, say — $view is going to be NULL, because optional config is imported in a single batch at the end of the installation process, long after all hook_install() implementations have been invoked.

Yeah, it’s a WTF, but it’s a justifiable one: trying to resolve the dependencies of optional config during Drupal’s install process would probably have been a colossal, NP-complete nightmare.

Dynamically altering optional config

So let’s say you need to make dynamic alterations to optional config. You can’t do it in hook_install(), because you can’t be sure that the config will even exist in there. How can you do it?

The easiest thing is not to make assumptions about when the config will be available, but simply react when it is. If the optional config you’re trying to alter is an entity of some sort, then you can simply use entity hooks! Continuing our fubar example, you could add this to fubar.module:

<?php use Drupal\views\ViewEntityInterface; /** * Implements hook_ENTITY_TYPE_presave(). */ function fubar_view_presave(ViewEntityInterface $view) { if ($view->isNew() && $view->id() == 'fubar_view') { $view->setDescription('Do, or do not. There is no try.'); } }

This ensures that fubar_view will contain timeless Yoda wisdom, regardless of whether fubar_view was imported while installing Drupal. If fubar_view is created at the end of the installation process, no problem — the hook will catch it and set the description. On the other hand, if fubar_view is installed during drush pm-enable fubar, the hook will…catch it and set the description. It works either way. It’s fine to dynamically alter optional config, but don’t assume it will be available in hook_install(). Simply react to its life cycle as you would react to any other entity’s. Enjoy!

Moar things for your brain
  • hook_install() can never assume the presence of optional config…but it can assume the presence of default config (i.e., the stuff in the config/install directories). That is always imported before hook_install() is invoked.
  • In fact, you can never depend on the presence of optional config. That’s why it’s optional: it might exist, and it might not. That’s its nature! Remember this, and code defensively.
  • The config_rewrite module, though useful, can throw a monkey wrench into this. Due to the way it works, it might create config entities, even optional ones, before hook_install() is invoked. Even during the Drupal installation process. Beware! (They are, however, working to fix this.)
  • The config system is well-documented. Start here and here. This post is only one of tons of other blog posts about config in D8.
  • This blog post came about because of this Lightning issue. So hats off to Messrs. mortenson and balsama.
  • Thanks to dawehner for reviewing this post for technical accuracy.
  • “NP-complete”, as I understand it, is CompSci-ese for “unbelievably hard to solve”. Linking to the Wikipedia article makes me seem smarter than I really am.

1 The reason this happens at the end is because any number of things could be changing during installation (who knows what evil lurks in hook_install()? Not even the Shadow knows), and and trying to solve multiple dependency chains while everything is changing around you is like trying to build multiple castles on a swamp. (Only one person has ever accomplished it.) Don't think about this stuff too much, or it will melt your brain.

2 “All”, in this case, means “all the optional config with fulfilled dependencies,” not all-all.

Categories: Drupal

Project Management Part 2: Making Your Game With The ABC-Recipe - by Sara Casen Blogs - 9 November 2017 - 9:25am
This ABC-recipe for making games can help you and your team to understand what should be done and when. It offers a guideline for working iteratively on games, minimizing stress and optimizing testing your upcoming game!
Categories: Game Theory & Design

Come to GDC 2018 for real talk on staying creative in difficult times

Social/Online Games - Gamasutra - 9 November 2017 - 9:23am

Veteran game dev Laralyn McWilliams will explore the challenges of working in a creative field while dealing with stress, grief, & change, drawing on her own experiences dealing with cancer. ...

Categories: Game Theory & Design

Quick Start Edition of Infinity RPG Posted Free Online

Tabletop Gaming News - 9 November 2017 - 9:00am
Modiphius wants to give you a chance to check out their RPG system based on the incredibly popular Infinity miniaturs game from Corvus Belli. They’re even giving you the first hit free. They’ve posted up the Quick Start edition of the rules and aren’t charging a thing for it. So why not download yourself a […]
Categories: Game Theory & Design

Steamforged Games Previews Alternate Millstone

Tabletop Gaming News - 9 November 2017 - 8:30am
I am a huge fan of alternate-sculpt models. They’re a great way to get an exclusive figure out there to the players. Well, for those that are into the Farmer’s Guild and looking to get the new box that’s coming out in January, you can also pick up an alternate-sculpt Millstone. How? Just order from […]
Categories: Game Theory & Design

Amazee Labs: GraphQL for Drupalers - the basics

Planet Drupal - 9 November 2017 - 8:25am
GraphQL for Drupalers - the basics

GraphQL is becoming more and more popular every day. Now that we have a beta release of the GraphQL module (mainly sponsored and developed by Amazee Labs) it's easy to turn Drupal into a first-class GraphQL server. This is the new GraphQL series in which we'll describe the features that are new in beta and provide a detailed overview of the integration with Drupal's entity and field systems.

Blazej Owczarczyk Thu, 11/09/2017 - 17:25

This is the new GraphQL series about the new features that are in beta (published 2 weeks ago) and how they are connected with Drupal out of the box

The modules

Let's start with the modules we need. Recently there were quite a few changes in this field. In alpha we had:

  • graphql - The main module laying the foundations for exposing data using Drupal plugins.
  • graphql_core - which exposed Drupal core data - the info about entity types and bundles, but not fields
  • graphql_content - which handled field exposition with the view modes
  • other auxiliary modules (e.g., graphql_boolean graphql_entity_reference) that provided behaviours for specific field types

In beta, the structure has changed. Now the default schema exposes all the Drupal fields and (content) entities in raw form, using the typed data. Thanks to that GraphQL became a zero-configuration plug and play module. We just need to enable graphql and graphql_core (the only two modules that are shipped with the package now) and we're good to go.

NOTE: The other modules are still available in case you need them, they're just not part of the core package anymore. graphql_legacy is where most of the field modules went. Besides that, there are graphql_views  which lets us expose views, the promising graphql_twig that allows using GraphQL queries without a decoupled setup and a few more. All of the modules are listed in the drupal-graphql organization page on GitHub.

The Explorer

After enabling graphql and graphql_core we can go ahead and test it with GraphiQL; an interactive tool that lets you run queries, see results in real time and preview all the available fields along with arguments and return types. It also provides query validation, autocompletes suggestions and keyboard shortcuts. Thus, it's a kind of an IDE. The explorer is connected with the schema. We can find it next to the Default Schema under: Configuration -> Web services -> GraphQL -> Schemas or using the direct path - graphql/explorer.

This is how it looks. On the left, there is a query box with a comment describing the tool and listing the keyboard shortcuts. Results show up in the box on the right. To run the query we can use the «play» button at the top, or the keyboard shortcut (Ctrl-Enter). One more important piece is the < Docs button in the upper right corner. This is where we can see all the available elements. Let's go ahead and click it.

The only thing we can start with is the query field which is of type RootQuery. Clicking on the type shows a list of available sub-fields, including userById, which looks like this:

This field takes two arguments: an id (which is a string) and a language (which can be set to any language enabled on the site) and is of type User. Clicking on the type brings up a list of fields on a user. The name is a string:

Strings are scalars (which means they don't have subfields) so we can finish our simple query here. It will look like this:

and (after running it with Ctrl-enter) the response is what we'd expect

The GraphQL explorer (or GraphiQL) gives us the ability to easily write and debug every GraphQL query. That's a feature that's hard to overestimate so getting familiar with it is a good starting point to understanding how GraphQL works in general and how we can get our Drupal data out of it.

The Voyager

Voyager is another schema introspection tool, a visual one this time. It draws a chart of all the types and field in the system and presents it in a nice way. It can be found next to The Explorer under: Configuration -> Web services -> GraphQL -> Schemas or using the direct path - graphql/voyager.

That's it for this post. In the next one, we'll see some examples of retrieving data from Drupal fields.


Categories: Drupal


Subscribe to As If Productions aggregator