All RPGs and Storygames by Tod Foley are now available at DrivethruRPG. Bring these games to your table!
Entity Remote is a helper module to keep entities in external database.
The work is in progress.
Entity Remote is a helper module to keep entities in external database.
The work is in progress.
The Mediacurrent team is excited to formally introduce Rain, an enterprise-grade Drupal install profile. Two years in the making, our team has spent countless hours developing these tools internally and deploying them to our client projects.
Our goal with this post is to share with the broader Drupal community, explain why we created Rain, and share how it can benefit your organization. We welcome feedback.What is Rain?
The Rain installation packages the best solutions the Drupal community has to offer so that organizations can build sites faster. We have used Rain internally for the last two years, making improvements along the way prior to its release as an open-source project.Made by Mediacurrent
We designed the Rain install profile with the goal to capture features that overlap all verticals and projects of every size and scope. As part of the development process, we examined features and content patterns from successful client projects over the past three years. Through our research, we found many content features and module configurations did, in fact, apply to projects across the spectrum. Our focus has been to build Rain with the features that create the best admin and authoring experience we can provide for our clients and the open-source community.
Mediacurrent believes strongly in open source solutions, so we have released all of our project tooling to the community. For more information on the tools we have publicly released please visit the Mediacurrent Development Tools page for more information and links to our projects.Who is Rain for?
It’s a full-time job to simplify processes on the backend and deliver a consistent, high-impact customer experience. Mediacurrent created the Rain Install Profile to make these jobs easier.
Clients using Rain today include large B2B Enterprise, Higher Education, and Non-profit organizations. The Rain distribution is flexible enough to serve large and small organizations alike. For large enterprise builds, the install profile will reduce overhead and take advantage of reusable features even if the project overall is a highly-customized implementation. Smaller, more budget-conscious organizations have the opportunity to reuse even more out-of-box functionality for further savings. The end result is a fully branded, enterprise-grade Drupal solution for your organizationWhat makes the Rain Install profile different?
At DrupalCon this year, co-worker Justin Rent and I presented on the idea of “Content Patterns.” This presentation gives a window into the challenges we were facing and our approach to addressing those challenges. In short, we believe to have long-term success as an agency we need to pool together best practices and take advantage of repeatable patterns. While every project we work on is unique in some way, we also see many shared problems that could benefit from common-sense solutions. As an organization, we made a commitment to build tools that would address those problems and share them with the community.
We package popular contributed modules like Metatag and many others that focus primarily on authoring and admin experience. Our installation comes with “sensible defaults” that offer a great out of box experience while saving developer and administrative time.2. Offer flexible content features to jump-start development
Rain offers a variety of content features, including content types and paragraphs, not found in most distributions. These features are all optional and offer the opportunity to jump-start development.
We believe our approach to content architecture gives editors a consistent, flexible interface for managing content. At the same time, it helps developers get going faster while being fully configurable.3. Ship with an extendable base theme and style guide
Rain ships with an excellent starter base theme. This offers several advantages but is not required (see our GatsbyJS + Rain webinar for a “decoupled" option).
The theme ships with a base style guide that includes the most common components you’ll find on a website. These components provide basic styling and markup that saves development time. The components are intended to be branded to match the design requirements of a given project. Additionally, all Paragraph features are pre-integrated with the base theme and style guide to once again save development time and reduce costs. The net result -- the development team gets a running start on a new project instead of constantly reinventing the wheel.Next steps
We would love to hear feedback from you. What features are your pain points, what features would you like to see? Interested in working with Mediacurrent? Contact us for a live Rain demo or for more information about our services.
And since items in Team Fortress 2 can be bought and sold on the marketplace for Steam Wallet Funds, the hiccup is already causing major issues. ...
Provides the ability to synchronize events to third-party calendars such Google Calendar. Supports insert, update and delete operations for node entities that have a date range field.
Requires the Google API Client PHP Library.
The module requires an external library, Composer must be used.
composer require "drupal/syncal"
The Search API Solr Partial Word Matching drupal 7 module intends to improve the full text search by adding the partial word matching functionality.How to use Search API Solr Partial Word Matching module?
Install it like any other module.
Despite past animosity, PlayerUnknownâ€ s Battlegrounds developer PUBG Corp says thereâ€ s no bad blood between it and Fortnite developer Epic Games. ...
We’re excited to be hosting the August 2019 TC Drupal monthly meeting, the first in the new "Lunch and Learn" format, which will rotate venues and feature a myriad speakers. See Allie's post about the change on the Twin Cities Drupal.org page. We look forward to them each month!
A stand-alone module to support the look and feel of the Claro toolbar styling for Admin Toolbar module that works both in the admin and frontend theme
Back in March of this year, I wrote a series of three articles about PC backgrounds. You can find part one, part two, and part three with their respective hyperlinks. Today, I’m going to be talking about NPC backgrounds. You’ll notice that this is going to be roughly one-third the size of the PC background series. That’s because GMs have enough to do without creating a five-page dissertation on the NPC’s past starting with their first memories and leading up to today. This means that we’ll be tackling some “quick ‘n’ dirty” backgrounds for the NPCs.How Much Is Too Much?
It’s all about return on investment (or return on time, which is more accurate for what we GMs are doing.) If an NPC is going to be frequently recurring or even traveling with the party for a while, then I delve a little deeper into the NPC’s backstory. I won’t go the total depth like I do with a PC, but there’s some good stuff in there. Borrowing from my PC background series, I’ll briefly sketch out the following details:
- Societal Role/Rank
- Physical Details (height, weight, eye, hair, scars, tattoos, etc.)
- Personal connection to at least one party member (if possible, perhaps tangential)
- 1-2 Quirks
- 1 Like
- 1 Dislike
- Motivation for said goal
- 1 Fear (optional)
- Limitation(s) if necessary
This is about the max that I’ll do. It’s gotta fit on an index card, or I won’t use it at all. Basically, if I can’t flip to their card and remind myself of a detail within a handful of seconds, then I’ve developed too much information for the NPC.
If I plan for a character to have less “screen time” with the party, then I’ll drop a few of these off the list, starting at the bottom of the list. Sometimes the NPC’s goal and motivation really don’t matter to their interactions with the PCs.
If you need to prepare more information than what’s on my list, that’s fine. Some people need more to hang their hat on. However, I would urge you to ensure whatever quick reference system you’re using allows you to ingest all of the details about an NPC in a single glance. (I’m about to make Phil SO happy about this next statement.) Index cards are your friends. If you can drop the information in a legible format on a single side of an index card, you’ll be doing just fine.How Little Is Too Little?
Using my list from above, my minimum NPC prep for one that I know I’ll be using (beyond “transactional NPCs”) will be the first five bullet points. Once I have a quirk down on the list of minor details about the NPC, I’m good. I’ll stop there. If I stop at the physical details, I know the NPC will come off as a “cardboard cutout” of a character, and that’s the best they’ll ever be. Just by throwing in one quirk, I’ve given the NPC some personality and a detail for the PCs to remember the NPC by.
If you struggle with the quirks aspect of NPCs, then hit our benevolent information overlords… Er… I mean Google, and search for “rpg random personality quirks”. You’ll find a whole slew of options to pick from for generating some quirks.Is Random Okay?
If you’re creating an NPC (especially if you hadn’t planned on creating many details about them) and that NPC is a “one shot” NPC, then it’s perfectly fine to turn to the countless “random NPC generator” tables, web pages, and so on that will create 3-5 little details about the NPC to make them a little more flavorful.
If the random table(s) you’re using only determine height, weight, eye color, hair color, and one physical affectation, then I’d recommend moving on to a different set of tables or adding to the resources that you’re using. While physical descriptions are fine for some basic characteristics, they really don’t define the character and how they act toward the world and react to stimuli. I’d much rather know that an NPC is brave and impulsive than knowing that they are tall and fat.How Did You Meet?
This is a great opportunity to leverage the creativity and imaginations of the players at the table. If they invent a situation where an NPC is introduced to the party or just flat create the existence of an NPC on the fly, don’t panic. You don’t have to stall the game while you create an NPC from random tables or think too deeply about the NPC’s goals and motivations.
Simply ask the player the created the NPC a simple question: How did you meet [insert name/label here]?
Of course, this isn’t going to go very far because it’s open-ended and non-leading. You truly want to use leading questions here. Give them some bait to entice them to bite deep into the “backstory hook.” Here are some sample professions for NPCs and how you can lead a player into a brief introduction of the NPC.
Barkeep: Why did the barkeep throw you out that one time?
Grocer: What did the grocer do when he caught you stealing an apple from him when you were five years old?
Weaponsmith: You apprenticed with the weaponsmith for a few months, but things didn’t work out. Why not?
Stablemaster: You helped save every horse from a stable fire when you were a wee lad. How did the stablemaster reward you?
Innkeeper: She caught you kissing her little brother/sister when you were thirteen. How did she react?
Need to determine if a migration is running? This module offers a service that you can call to check that. Like this:
The expanding data landscape is feeding the demand for higher operational agility. This calls for a more responsive, reliable IT infrastructure — that doesn’t rake up millions — minimizes delays and downtime while improving security and making infrastructure more agile.
Between capacity constraints and unpredictable pricing models, AWS offers suited workloads for growing infrastructure needs with a host of services - IaaS, PaaS, SaaS - for Drupal enterprises.
Here’s how you can run your Drupal up to 40% cheaper.
Drupal-powered enterprises need to constantly understand and adapt to the changing landscape in order to achieve the business objective
You know how important accessibility is, but now what? There are a lot of well intentioned sites on the internet that aren’t accessible.
Is your website accessible?
How do you find out?
Well, it’s not as hard as it seems—and we’re here to help! Here are a few quick ways to measure the accessibility of your website.1. Automated accessibility tests
While automated tools will only catch about 30% of accessibility bugs, they will give you a general idea of your site’s accessibility and show you some ways to make improvements.Lighthouse: Chrome’s Accessibility Reporting Tool
Lighthouse is a free tool available right in Chrome. You can use it by simply using chrome’s testing website, in your development tools when you inspect a page, or with a browser plugin. Keep in mind that manual testing is also required to get a full picture of accessibility—we’ll cover that in just a moment.
To use the tool by going to a URL: Visit https://web.dev/measure and paste the URL of the page you want tested into the form field, then click “Run Audit” to see results.
To use the tool through inspect
- Right click on the webpage you want to test, and select “Inspect” from the dropdown or from your keyboard press command + option + I. This will open the inspect tool and bring up the last tool you used, so if the last thing you did was run an audit, it will bring you back to the audits panel.
- In the inspection window at the top right, click on the button with a double arrow, or expand the window until you see “Audits.” Select “Audits.”
- Select your device size (mobile or desktop), and select “Accessibility” from the Audit Type options.
- Click “Run Audits.”
- A report will pop up in the inspect window with your overall score with information about your score results. Scores are out of 100, and 100 does not mean that a site is completely accessible–it means that it passed all automated tests.
- Below the score are details about accessibility errors. Toggle open these errors to see what element is failing and how to make fixes.
WAVE is a browser extension that allows you to run an automated accessibility test on a page of your website. It’s very thorough and one of our favorites for testing and fixing accessibility bugs.
To use WAVE:
- Install the WAVE Extension
- Go to the webpage you want to test, and click on the WAVE icon in the tools portion of your browser window. A report will pop up and your page will be marked up with the results of the review.
- A Summary will show up by default listing the number of Errors, Warnings, and other details on the page.
- Click on the Flag icon to see more details. This will include information about what errors are on the page
- Clicking on the Tab at the bottom of the page that says “< code >” will show you the code marked up with the errors found.
- With the “< code >” tab open, you can click on the errors and warnings in the panel on the left to jump to the errors in the code. In the image below, clicking on the yellow rectangle “Redundant Link” icon in the report panel makes the code jump to the offending code.
A manual test will catch things automated tests can’t quite figure out. Robots are good for some things, but they can’t figure out human intention, so things like tab order, visual theming and good alt tags should be manually tested.
Keyboard testing makes sure that the site works for folks who are blind, who have low vision, who have limited mobility, or the person whose trackpad is broken. Conduct the following tests to see if your site is accessible to those using a keyboard to navigate:
- Go to the page you’d like to test. Start with your cursor in the address bar, and hit the “tab” button to navigate through the page. Each time you press tab, you should be moved to the next button, link or form input.
- Ideally, the first link you get to on the page is a “skip to main content” link that allows users to skip repeated navigation items.
- As you continue to tab through the page, you should be able to see where the focus is as it lands on each button, link and form field. Pro-tip: If you lose track of where it is because there’s not a visual indication that’s an accessibility issue.
- Check the order: Does pressing the tab key follow the natural flow of the page, or does it jump around? A good tab order follows the natural flow.
- Can you operate all menus, pop-ups, buttons, and forms?
- Can you press shift tab and navigate backwards?
- Are there items that are clickable that don’t receive focus?
Important Note: Keyboard testing needs to be done on mobile as well as desktop. Why? Some users who are blind don’t use full-sized computers or laptops because they don’t actually need a large display. Other users have low vision and magnify their screens. Which leads us to testing with zoom…3. Testing with zoom
If you zoom a desktop screen to 400% on a responsive site you get…the mobile site! This is why testing on mobile and desktop is important.
Now that you’ve increased the screen to 400%, browse the page. As you browse ask yourself:
- Does text content get cut off?
- Do buttons get pushed off of the page?
- Is the functionality intact?
- Is there key functionality on desktop that’s no longer available on the mobile version?
Using a screen reader is a more advanced testing approach, and very helpful in identifying accessibility bugs on a site. If you use a mac, VoiceOver is the built in screen reader. To turn VoiceOver on or off, press command f5. Here’s a quick video tutorial on how to test your page using VoiceOver. The video description includes the full text of the captions as a quick reference.
You can also turn on VoiceOver and tab through the page again to see if icon buttons are labeled properly, if the form labels you’ve applied make sense, and if alt tags on images are useful. If you press “control option a” all at once, VoiceOver will start reading every element from where you are on the page. If you tab, it will read the buttons, links and form inputs.To sum it up:
Learning about different testing methods can help inform and add clarity to the process of making your site accessible. This is one of the most critical steps in your journey to making a website that everyone can experience. If you want to know how to transform these errors into a site that reads and navigates smoothly for all users, ThinkShout is here to help! Contact us to learn more about how we can partner to make your website more accessible.
Optional Email allow anonymous user to register without using email address
"Hello World!" example in Drupal.
An example Drupal 8 module with a controller.
The module does not have any specific requirements.Installation
Install as you would normally install a Drupal module.
Please download and install through Drupal admin area or use
composer require drupal/helloworld
then enable the "Hello World" D8 module.
Recently I ran into a situation while building out the Watson/Silverpop Webform Parser where I just wanted to test and see if a few things worked without having to reload and bootstrap Drupal every time I refreshed a page. I also wanted to utilize some of the classes and methods made available from Symfony and Drupal. Can you feel my dilemma?
Let's be honest, running drush cr and refreshing a page takes time, and I'm an impatient person, so I wanted to see if there was a way to use some of these things without going through the pain of waiting for a Drupal bootstrap. Turns out, the solution wasn't that difficult and it made development on many methods of my module more pleasant than it could have been.Here's the scenario
I wanted to test a few things that didn't require the database connection. Specifically, Drupal\Core\Serialization\Yaml to parse an array that I was building into YAML. So, what I did was stubbed out what would become my class WatsonFormEntityForm in a file in my docroot that I creatively named test.php. Now I was able to navigate to local.docksal/test.php on my local machine and see things working.Get to the good stuff, already!
I got to a point in my development where I was able to convert the submitted HTML, in this case from a call to file_get_contents('./test.html'); into an array that I could work with. Xdebug was going great, and so was the module, but I wanted to see if I could convert it into YAML using a native Drupal method. The solution came with one single line of code.$autoloader = require_once 'autoload.php';
This tells PHP, "Hey, we got a file here that wants to use some of the methods and classes in the Autoloader. Let's go ahead and let it!" This variable doesn't need to be called anywhere in the file. It just needs to exist. Now I was able to update the file with a few friendly use statements from within the Drupal and Symfony ecosystem without having to wait for all the database connections to happen.
The end result was:<?php use Drupal\Core\Serialization\Yaml; $autoloader = require_once 'autoload.php'; // Do all the things here, including: $yaml = Yaml::encode($array); var_dump($yaml);
It sped up development, and it made it so I didn't have to wonder if something wasn't working because I forgot to drush cr all the things or if it was just because I made some mistakes.Gotchas
Be sure that any code you're running doesn't rely on database calls or the container. For instance, if you try to run $nodes = \Drupal::entityTypeManager()->getStorage('node')->loadMultiple(); is going to throw a painful error.
Also, this is mainly for rapid prototyping or proving concepts. I don't recommend writing an entire module in procedural code and then trying to refactor later. Maybe take it one function at a time just to make sure it's doing what you want it to do.
Let me know if this helped you out or if you have better suggestions for rapidly testing some Drupal stuff without having to rely on a full bootstrap. As always, feel free to reach out to me on the Drupal Slack, where I'm always Dorf and always willing to help if I can.Category Development Tags Drupal Drupal Planet Comments
Discord's latest update introduces the ability to sort different servers into custom folders, something the company says has been a highly requested feature for some time. ...