All RPGs and Storygames by Tod Foley are now available at DrivethruRPG. Bring these games to your table!
Drupal 8.7 was released couple of days ago on May 1, 2019. As you might know, new features are added with each minor release of Drupal 8 (e.g. between 8.6 and 8.7) which occur in 6-month intervals. Originally 8.7 was supposed to be released in March 2019. But the timing of Drupal's releases has historically occurred 1-2 months before Symfony's releases, which forces Drupal community to wait six months to adopt the latest Symfony release. In order to be able to adopt the latest Symfony releases faster, Drupal community shifted Drupal's minor releases to May and December in a plan to allow adoption of latest Symfony releases within a month.
This is penultimate version of Drupal 8, which will be concluded with Drupal 8.8 in December 2019, after which we expect release of Drupal 9 sometime in June next year!
Beside bug fixes and dependency updates lets see what new features Drupal 8.7 brings!
Taxonomy terms and custom menu links are now revisionable, which allows them to take part in editorial workflows which was until now only possible for Content types and Custom blocks.
JSON:API in Core
Drupal 8.7 will provide an out-of-the-box JSON:API implementation, marking another major milestone towards making Drupal API-first.
Now you will be able to generate an API server that implements the JSON:API specification with zero configuration. Once you enable the module, you are done.
Developers and content-creators can use it to build both coupled and decoupled applications and pull content from Drupal into iOS and Android applications, chatbots, decoupled frontends such as ReactJS, voice assistants and many more!
Layout Builder module is now stable
Layout Builder module was originally added as an experimental core module in Drupal 8.5 and is now stable and ready for production use!
If you haven’t heard about it Layout Builder is offering a single, powerful visual design tool for site builders to create templated layouts and custom landing pages.
PHP 7.3 Is Now Supported
PHP 7.3 was released in December 2018 and comes with numerous improvements and new features. Also with this release new Drupal sites can only be installed on PHP 7.0.8 or later. Installing Drupal on older versions results in a requirement error.
However, existing sites will still work on at least PHP 5.5.9 for now, but will display a warning
PHP stopped supporting version 5.5 on July 21, 2016 and Drupal security updates will begin requiring PHP 7 as early as Drupal 8.8.0 (December 2019), so all users are advised to update to at least PHP 7.0.8 now or preferrably to PHP 7.3.
As part of continuing GDPR compliance improvements in Drupal core, Comment module no longer logs IP addresses for comments by default. Existing sites will still continue to log IP addresses but this can be changed by changing comment.settings.log_ip_addresses to FALSE in the site configuration using settings.php.
This was just a short brief into the new features. For a full list take a look at official release notes: https://www.drupal.org/project/drupal/releases/8.7.0
ws_admin Tue, 05/07/2019 - 14:05
To be competitive with enterprise form builders, the Webform module for Drupal 8 needs to support the downloading and exporting of submissions as PDF documents, as well as sending PDF documents as email attachments.
The Entity Print module does a great job of generating PDF documents from entities and fields, but webform submissions don't use Field API. This limitation has required site builders and developers to create custom Entity Print integrations for the Webform module.
The Webform module now includes a Webform Entity Print integration module, which handles downloading, exporting, and attaching generated PDF documents. Additionally, the Webform module allows the generated PDF document's header, footer, and CSS to be customized.
When enabled, Webform Entity Print module automatically displays a "Download PDF" link below all submissions and adds a download "PDF documents" option to the available export formats. Attaching PDF documents to emails requires that you add an "Attachment PDF" element to a webform and then configure email handlers to "Include files as attachments."
The below screencast and presentation walks through customizing the PDF link and template, exporting PDF documents, and attaching PDFs to emails.
Scratching my own itch
Adding PDF support was not a sponsored feature. I wanted the Webform module to support this advanced feature; so I created it. I was scratching my own itch.
The bigger itch/the challenge that I am always scratching at is:
Competing with other form builders
Competitive enterprise, and also Open Source form builders, tend to put this PDF functionality behind a paywall. For example, WordPress's Gravity Form (Read More
OPTASY: Looking for a Drupal 8 Rating Module? Here Is a Top 5 Flexible and User-Friendly Rating and Review Modules
Looking for a Drupal 8 rating module that should be:
- easy to install
- easy to configure
- easy to use
- conveniently flexible
- and user-friendly?
And maybe you “crave” for some nice-to-have features, as well:
- enabling users to add a short review
- multiple ratings: enabling users to vote on several aspects of your product/service, such as price, quality, ease of use?
What are your options? What working (and stable) modules for rating and reviewing are there in Drupal 8?
We've done the research for you, evaluated all the modules for rating in Drupal 8 and come up with a list of 6 best... rated ones:
This module closely follows Bootstrap4 grid system.
After installation two paragraph-types are created:
1. Bootstrap4 ContainerRow
2. Bootstrap4 Column
It seems the trend nowadays is for workers to take the freelancing route. With 36% of the U.S. population currently being freelancers, it seems that this trend is slowly gaining traction. But what does this mean for businesses. It seems that hiring freelancers definitely has its benefits, however it also has its challenges. In this article I’m going to talk about the potential drawbacks that come with hiring a freelancer.1. Hiring the wrong freelancer
Hiring the right person for the job is a complicated process even for a regular full-time employee. However, when it comes to hiring a freelancer, the interview should not be the same process as when hiring a full-time employee. Working from home requires a high degree of self-motivation, resourcefulness and self-discipline. On top of that, the freelancer should also be resilient to loneliness, since freelancing usually lacks the same social engagement that a conventional workplace can provide. If the freelancer doesn’t have these qualities, then he is going to be unhappy during the 30-40 hours he is working, which is bad for business and bad for humanity.2. Too many options
After posting a job advertisement a client might be suddenly bombarded with a lot of replies from freelancers who are out to get the gig. But how does the client choose from so many options? Well, some freelancers will set up automatic bots that are automatically replying to the job post based on a few parameters. Most of the time, these type of freelancers will not have read the job requirements. They are not taking their time to make sure that they are a great fit for the job. Then there is another type of freelancers. The ones that report a great amount of experience, yet they are charging suspiciously low rates. This type of freelancers either don't value their own work or the quality of the work provided is questionable and they use low rates as a cover-up. A client might feel overwhelmed by the options they have at their disposal. The best way to avoid this is to have an effective way on how to screen the freelancers.3. Communication problems
Another big challenge that comes when hiring a freelancer is one of communication. As the name implies the freelancers are free to work whenever they want or feel inspired. What this means is that as a client you might not receive updates on the status of the work that the freelancer is doing. These can raise a lot of uncertainty for the client as he is kept in the dark with regards to the progress of his project.4. Payment issues
Freelancers are not like regular employees. Naturally, this means that the payment process is going to be different than that of regular employees. First of all, the freelancer will not appear on the companies payroll, meaning that other alternatives for making the payment have to be found. On top of that, if the freelancer is outsourced from another country, the cost of transferring the money has to be taken into account. It's important to find a way to transfer the money that is advantageous for both the client and the freelancer, this way, confusion regarding the time until the payment is done and high fees when doing the payment through international banks are avoided. Some services that are good to use when paying outsourced employees are Paypal, Skrill and Payoneer.5. Being clear in requirements and feedback
In order to avoid frustration on both sides, the client has to be clear in their requirements and in the feedback provided by the freelancer. Otherwise, the client might risk to see the completion of his project in a totally different light than he was expecting. In order to be able to receive the project in the way that he envisioned it, the client has to be as thorough as possible when describing the job requirements. On top of that, regular feedback has to be provided. This way, the client will surely be able to increase the chances that the result he is going to receive is satisfactory.6. Different language and culture
When it comes to effective communications, speaking a common language is of essence. In most cases, this language is going to be english. Finding a freelancer that is able to communicate at an advanced enough level of english to be able to discuss work related subjects might be difficult. On top of that, the culture of a country also has to be taken into account. Keeping in mind that different cultures have different communication approaches. For example, the difference between low context societies and high context societies, where one relies on explicit communication while the other on implicit communication. On top of that low context and high context are valuing non-verbal communication and cues to different degrees. Being aware of these differences can make communication easier and more pleasant for both parties.7. Lack of commitment
Freelancers have the possibility to undertake multiple projects from different clients. What this means is that a freelancer will not be able to fully commit to your project, especially if another project is more challenging, exciting or more financially rewarding. On top of that, a freelancer will always prioritize the projects that make more sense from the point of view of the before mentioned aspects, pushing other projects to the side. This can cause a lot of frustration for the client, however, in order to avoid the frustration, the client has to make his project as appealing as possible from every aspect. For example, make sure that the project is challenging and exciting enough to keep the freelancer engaged. On top of that, clients should avoid paying below market-rates for freelancers because that can work as an open invitation for the freelancer to find new clients.8. Missed deadlines
Another challenge that clients have to face when hiring a freelancers are missed deadlines. Freelancers are having more freedom when it comes to planning their working routine, as long as the contract does not stipulate specific working hours. This means that there is an increased risk of life events happening. Events like weddings, a relative getting sick, funerals seem to be happening at a larger frequency than for regular employees. These events can interfere with the ability of the freelancer to be able to deliver the project in time, thus resulting in a missed deadline.9. Misunderstandings
Since freelancers don’t work in the office as every other regular employee, they are harder to supervise. What this means is that they are not there for the client to be able to get regular updates, or to provide feedback or to train them. If clear enough instructions were not provided, the freelancer can finish the project in a different manner than the one envisioned by the client. This misunderstanding will lead to frustration on both sides, since the client will demand adjustments and the freelancer will deliver these adjustments while not getting paid for them.Conclusion
Hiring a remote employee is always a challenge. Especially in these days when the working culture has not fully adapted to the flexibility of the freelancers. However, being aware of the challenges of hiring a freelancer will make it easier to adapt and foster a productive relationship between you and your outsourced employee. So, embrace change and think about the possibility of hiring freelancers.
The CiviCRM core team have looked at this and are now in a position to complete the work to make this an official CiviCRM release. This means they will make changes so
- CiviCRM can easily be installed with Drupal 8
- They will ensure CiviCRM works with Views in Drupal 8
- Going forward future CiviCRM releases will be tested with Drupal 8
Any money raised by the Make It Happen which is not spent on the initial work will be used to support future work on the CiviCRM Drupal 8 integration as needed. What about Drupal 9? Isn't that being released soon? Both Drupal 7 and 8 are officially supported until November 2021. But the move from Drupal 8 to Drupal 9 will not be the same as previous Drupal major updates. It will be much easier to migrate existing sites between Drupal 8 to 9. For more information see https://dri.es/drupal-7-8-and-9. The CiviCRM core team has looked at this and the code changes required to ensure CiviCRM works with Drupal 9 should be minimal. So very importantly this Make It Happen work is also preparation for Drupal 9. If your organisation uses CiviCRM with Drupal then please contribute to this Make It Happen. https://civicrm.org/make-it-happen/civicrm-d8-the-official-release CiviCRMDrupalDrupal 8Make it happen
An easy to use module to manage petitions on Drupal.
Create, Edit, Check results, Publish Results, Send notifications...
Using UI pattern libraries in Storybook allow us to build a collection of front end UI components that can be used to build bigger components, even full web pages. However, frontend/backend integrations can be fraught with difficulties. In this piece, I’ll explain our process to make these challenges easy, even when using GraphQL fragments inside Twig templates.Jamie Hollern Mon, 05/06/2019 - 20:54 What Drupal and GraphQL do well
At Amazee Labs, we build decoupled web applications using GraphQL and Drupal. We’ll touch on the reasons that we use this approach in this article, but if you’d like to know more, check out these blogs:
- Introduction to GraphQL
- Don’t Push it: Using GraphQL in Twig
- Graph QL with Twig: Questions and Answers
Drupal is known for its complex and unwieldy theming and rendering system. Data to be rendered comes from across the system in the form of templates, overrides, preprocess functions and contributed modules such as Panels and Display Suite. Sometimes trying to track down where data is being generated or altered is like a murder mystery.
Thankfully, GraphQL Twig simplifies the situation massively. Each template has an associated GraphQL query fragment that requests the necessary data. This “pull” model (as opposed to Drupal’s normal “push” model) means that finding where the data comes from and how it is structured is really easy. We don’t need to worry about preprocessing or alteration of data, and this method lets us keep the concerns separated.Advantages of UI component libraries
The main advantage of using a UI component library (also known as a pattern library) is that it facilitates the reusability of components. This means that when a component is created it can be used by any developer on the project to build their parts of the front end and in turn can be used to make larger and more complex components.
There are multiple extra advantages to this, the most obvious being the speed of development. Since all components are simply made up of smaller components, building new ones is usually much quicker, since we don’t need to reinvent the wheel.
This also makes maintenance a breeze, since we’re only maintaining one version of any component. If we decide that all buttons on the frontend need to have an icon next to the text, we simply change the button component and this change will apply everywhere that the component is used.
Finally, the reusability of components in a pattern library means that the UI is consistent. Often, web projects face difficulties where there are multiple versions of various components, each with their own implementation. This is especially true of larger projects built by multiple people, or even multiple teams, where no single person knows the entirety of the project’s implementation details. Thanks to the reusability of our components, we only have one implementation per component.Challenges of using Drupal, GraphQL, and Storybook together
If done poorly, using pattern libraries like Storybook can be difficult and cause problems during the integration phase(s) of development. The main issue is usually that the frontend and backend developers have different approaches and different goals when developing.
The frontend developer wants to create the best UI they can in the most efficient way possible, using the paradigms and approaches that are standard or preferred. Unfortunately, at times the implementation doesn’t sync well with the data structure that the backend developers receive from Drupal, so the frontend needs to be refactored or the data structure needs to somehow be altered.How to make it work
I won’t go into detail on our implementation of the Storybook library, but we keep Storybook in the same repo as our Drupal application, outside the root. We then define a base storybook theme and using the Components module (built by my talented colleague John Albin), we define our path to the Storybook Twig templates as a component library in our .info.yml file. This way, the Drupal theme has access to all of our templates.
We then create our project-specific theme, which extends the base Storybook theme, and start to work on our integration. A generic page.html.twig file might look like this:
At Amazee, we use a UI component library because it makes sense to build a maintainable, reusable and consistent set of components for our frontend that also encourages faster development. We also try our best to streamline our integration processes so that all of our developers are more closely aligned and developing solutions that make it easier for their colleagues to use, learn and extend easily.
Storybook gives us the power to build a component library using mock data that is structured in the exact manner that our GraphQL queries deliver it. This means no refactoring, building both queries and templates only once and an overall smooth integration process.
Want to know more about using GraphQL and Twig? Check out our webinar!
Drupal released its latest version - Drupal 8.7.0 on 1st May 2019. The latest version of Drupal 8.7.0 accomplishes tasks like making page layouts, media management and decoupled web experiences easier to manage and deliver, conserving production time and effort and it was recently revealed at DrupalCon Seattle 2019.
Core objectives when developing Drupal 8.7 were to:
- Make Drupal easy for content creators and site builders
- Make Drupal easy to evaluate and adapt.
- Keep Drupal impactful and relevant
- Reduce total cost of ownership for developers and site owners
The latest Drupal 8.7 update includes JSON:API as a part of the Drupal core!
This makes Drupal an API first platform for building both decoupled and coupled applications. JSON API module exposes the entities as a standards-compliant web API and data can then be pulled from third-party URLs or API’s.
JSON:API is designed specifically to minimize both the number of requests and the amount of data transmitted between clients and servers. This efficiency is achieved without compromising readability, flexibility, or discoverability.
By enabling the JSON:API module, you can immediately create a full REST API endpoint for every type(content, taxonomy, user, etc.) in your Drupal application. JSON:API inspects your entity types and their bundles to dynamically provide URLs to access every entity using the standard HTTP methods, GET, POST, PATCH, and DELETE.
JSON:API adopts the philosophy that the module should be production-ready. This means the module is highly opinionated about where your resources will reside, what methods are immediately available for them, and allows Drupal Core's permissions system control the access. The configuration pages are no longer present in this upgrade (Drupal 8.7). This means that you can get an API-driven Drupal application up and running with minimal effort.
Watch the JSON:API demohere!Stable Layout Builder
The Stable Layout Builder was released with Drupal 8.6 as an experimental module and now it is stabilized in Drupal 8.7.
Drupal 8's Layout Builder allows content editors and site builders to easily and quickly create visual layouts for displaying content. Users can customize how content is arranged on a single page, across content types, or even create custom landing pages with an easy to use drag-and-drop interface.
Explore the sections below to find out how to get started with Layout Builder and how to apply it to templated content types. Layout Builder is anchored on one of Drupal’s stronger features – the ability to create structured content; but it faces some of the same accessibility challenges encountered by WordPress’ Gutenberg editor. Drupal's Layout Builder offers a single, powerful visual design tool for three use cases:
Layouts for templated content: The creation of "layout templates" that will be used to layout all instances of a specific content type (e.g. blog posts, product pages).
Customizations to templated layouts: The ability to override these layout templates on a case-by-case basis (e.g. the ability to override the layout of a standardized product page).
Custom pages: The creation of custom, one-off landing pages not tied to a content type or structured content (e.g. a single "About us" page).
Watch the Demo of Drupal 8 Layout Builderhere!Media Library
Drupal 8.6 had Media Library in the Drupal core, which was a part of Media Initiative. In Drupal 8.7 Media Library comes with a new stylish and handy user interface. Which makes it nice to look and nice to work with. Media library is now stable.Third-party library updates
- Guzzle has been updated from 6.3.0 to 6.3.3.
- Previously, Drupal packaged a copy of the PEAR Archive_Tar library in a Drupal core namespace. In Drupal 8.7, this has been deprecated and replaced with a proper Composer dependency on this library. The dependency has also been updated to version 1.4.6.
- Stylelint has been updated from 9.1.1 to 9.10.1. Stylelint version: https://github.com/stylelint/stylelint/releases/tag/9.10.1
- Coder to ^8.3.1
- CKEditor has been updated to 4.11.3.
- Twig has been updated to 1.38.4.
- A number of other PHP dependencies have also been updated, including:
- composer/installers to 1.6.0
- composer/semver to 1.5.0
- egulias/email-validator to 2.1.7
- paragonie/random_compat to v2.0.18
- Most symfony/* components to v3.4.26
- symfony/http-foundation to v3.4.27
- symfony/polyfill-* to v1.11.0
- typo3/phar-stream-wrapper to v2.1.0
The 8.7.0 release is a final goodbye to Internet Explorer 9 and 10. It removes a workaround that still existed in D8.5 and D8.6 Issue link: Internet Explorer 9 and 10 support dropped from Drupal 8.4.xGoodbye PHP 5 support
Drupal 8.7 is the last release to support PHP 5. Updates for existing websites that use PHP 5 are still possible, but a warning will be displayed. In release 8.8, Drupal security updates will require PHP 7.Entity updates will not be automatic
In new Drupal 8.7.0 release, the support for automatic entity updates has been removed. The reason is data integrity issues and conflicts. So the drush entity: updates (drush entup) command no longer works. Changes to entities will now be performed using standard update procedures.Symfony 4 and 5 compatibility issues resolved
Additionally, numerous critical Symfony 4 and 5 compatibility issues are resolved in this release.Changes to base themes (Stable, Classy)
These Drupal upgrades are gradually getting us ready for Drupal 9. If you have questions regarding Drupal upgrades we are here to help. Drop us a word at email@example.com Mon, 05/06/2019 - 20:43
This module changes default image field widget and formatter to allow
Allows to make and visually compare screenshots of your Drupal website. These
can be integrated in your continuous integration environment.
This module provides two aspects for a common purpose:
- A web interface to compare screenshots
- A CLI interface to run tests and create screenshots.
Tests are written as CasperJS scripts.
This module allows the Forex traders to keep their trades in a journal. The journal includes various trade related information such as the currency pair, buy price, open date and time, etc.
An DarthSim's imgproxy integration in Drupal. Currently contains only a formatter for the image field type, a module theme and a twig function.
This module allow you decoupled configuration files split config items in
separated config files located in modules.
How to use:
Create decoupled_config directory in your module and put your config files
Those config items will be merged in the import process with your
config/sync configurations to get the active configuration.
Dangling conjunctions, also known as orphans, are a typographical error in the Polish language. They are single-letter words left at the end of a line. This rule applies to, for example, conjunctions and prepositions.Functionality
This module provides a text filter that moves dangling conjunctions from the end of each line. It contains its own set of words. It automatically adds a non-breaking space to the text where necessary.