Planet Drupal

Syndicate content - aggregated feeds in category Planet Drupal
Updated: 37 min 53 sec ago

La Drupalera (en): How To Create a Custom Format for a Date Field

Mon, 05/22/2017 - 10:33
div data-history-node-id=212 class=node node--type-article node--view-mode-rss ds-1col clearfix img property=schema:image src= width=650 height=432 alt=Crear formato personalizado para un campo de tipo fecha typeof=foaf:Image class=image-style-max-650x650 /pspan id=docs-internal-guid-83acb322-2f4a-e22f-04e4-f610882d2293In this post, you will learn how to create a custom date format for Drupal 7./span/p div class=field field--name-node-link field--type-ds field--label-hidden field__itema href= hreflang=en-x-simpleRead more/a/div /div

Code Positive: Rich Snippets Structured data

Mon, 05/22/2017 - 10:05
a href= src= width=940 height=230 alt=Rich Snippets Structured data title=Rich Snippets Structured data typeof=Image class=image-style-rss-banner //a pThe benefits of Rich snippets and how to implement structured data in Drupal 8 to enhance the way your pages are listed by search engines./p pa href= MORE/a/p p /p

Acquia Lightning Blog: Experimental module warnings and Lightning

Sun, 05/21/2017 - 02:28
span class=field field--name-title field--type-string field--label-hiddenExperimental module warnings and Lightning/span span class=field field--name-uid field--type-entity-reference field--label-hiddenspan lang= about= typeof=schema:Person property=schema:name datatype= xml:lang=Adam Balsam/span/span span class=field field--name-created field--type-created field--label-hiddenSat, 05/20/2017 - 20:28/span div class=clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__itempLightning has used the Layout Plugin module since a href= our first beta release/a. Starting in Drupal 8.3.0, the functionality provided by the Layout Plugin module was largely duplicated in Layout Discovery and released as part of the Core Experimental group. Lightning migrated to Layout Discovery in 2.1.1./p pThe Lightning team feels like it's a win anytime we can migrate from contrib to core. But another advantage of this is that since Layout Discovery is in Core, security issues can be filed against it in the Core security issue queue which is monitored by the a href= Team/a. Layout Plugin, being alpha, didn't have a security issue queue./p pTechnically, Layout Discovery is an a href= core module/a though. And the new Status Report page warns users if any Experimental modules are enabled. As a result users of Lightning are presented with this unhelpful message when they visit /admin/reports/status:/p article class=embedded-entityarticle class=media media-image view-mode-embeddeddiv class=field field--name-image field--type-image field--label-hidden field__item img src= width=1280 height=214 alt= typeof=foaf:Image //div /article/articlep /p pThe problem is, this message isn't actionable. Lightning made the decision to enable it. The only way to disable it would be to completely opt out of all of Lightning's Layout functionality./p pTo be clear, the Lightning team feels that the Layout Discovery module is certainly stable enough to run predictably and reliably on production websites. This warning from core is supposed to indicate that the underlying API might change or that it might ultimately be removed from the core package. strongUnder either of those circumstances, Lightning would provide a migration script or otherwise support users/strong./p pWe feel that warning a user after they (or their site builder) has made the decision to use an experimental module is in-actionable nagging. We support warning site builders when installing an experimental module, but not constantly reminding them of that decision./p pa href= in 2.1.4, Lightning will include a core patch that removes the warnings for experimental modules on the status page/a. The patch does not affect the existing warning that is shown during installation of experimental modules./p pThere are two other nagging warnings that Lightning will remove in 2.1.4. Specifically, it will stop warning the user if:/p ullia href= config sync directory exists but isn't writable/a (no reason to write to the config directory on prod, for example)/li lia href= update module isn't enabled/a (update module creates overhead and updates might be handled by a separate system)/li /ulpRelated, there is also a a href= discussion around what the requirements should be for reporting on the status page/a. Discuss!/p h3Summary of new patches related to reporting that will be included in 2.1.4:/h3 ulliRemove scary 'experimental module' messages from appearing everywhere on the site (#a href= liConfig sync should not throw a warning when not being writable (#a href= liDisable warning about update notifications (#a href= /ul/div

Drupal Association blog: Insight into Drupal Association Financials

Sat, 05/20/2017 - 14:47
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpTo give more insight into Drupal Association financials, we are launching a href= rel=nofollowa blog series./a This is the first one in the series and it is for all of you who love knowing the inner workings. It provides an overview of:/p ulliOur forecasting process/li liHow financial statements are approved/li liThe auditing process/li liHow we report financials to the U.S. government via 990s/li /ulpThere’s a lot to share in this blog post and we appreciate you taking the time to read it./p h3Replacing Annual Budgets With Rolling Forecasts/h3 pPrior to 2016, the Drupal Association produced an annual budget, which is a common practice for non-profits. However, two years ago, we found that the Drupal market was changing quickly and that impacted our projected revenue. Plus, we needed faster and more timely performance analysis of pilot programs so we could adjust projections and evaluate program success throughout the year. In short, we needed to be more agile with our financial planning, so we moved to a rolling forecast model, using conservative amounts./p pUsing a rolling forecast means we don’t have a set annual budget. Instead, we project revenue and expense two years out into a forecast. Then, we update the forecast several times a year as we learn more. The first forecast of the year is similar to a budget. We study variance against this version throughout the year. As we conduct the additional forecasts during the year, we replace forecasts of completed months with actual expenses and income (“actuals”) and revise forecasts for the remaining months. This allows us to see much more clearly if we are on or off target and to adjust projections as conditions that could impact our financial year change and evolve. For example, if we learn that the community wants us to change a ad placement that could impact revenue, we will downgrade the revenue forecast appropriately for this product./p pIn 2017, we there will be three forecasts:/p ulliDecember 2016:  The initial forecast was created. This serves as our benchmark for the year and we run variances against it./li liMay 2017: We updated the forecast after DrupalCon Baltimore since this event has the biggest impact on both our expenses and revenue for the year./li liOctober 2017: We will reforecast again after DrupalCon Vienna. This is our final update before the end of the year and will be the benchmark forecast for 2018./li /ulpCreating and approving the forecasts is a multi-party process./p olli pStaff create the initial forecast much like you would a budget. They are responsible for their income and expense budget line items and insert them into the forecasting worksheet. They use historical financials, vendor contracts and quotes, and more to project the amount for each line item and document all of their assumptions. Each budget line manager reviews those projections and assumptions with me. I provide guidance and challenge assumptions and sign off on the inputs/p /li li pOur virtual CFO firm, a href= rel=nofollowSummit CPA/a, analyzes the data and provides financial insight including: Income Statement, Balance Sheet, Cash Flow, and Margin Analysis. Through these reports, we can see how we are positioned to perform against our financial KPIs. This insight allows us to make changes or strengthen our focus on certain areas to ensure we are moving towards those KPIs - which I will talk about in another blog post. Once these reports are generated, the a href= rel=nofollowDrupal Association board finance committee/a receives them along with the forecasting assumptions. During a committee meeting, the committee is briefed by Summit and myself. They ask questions to make sure various items are considered in the forecast and they provide advice for me to consider as we work to improve our financial health.  /p /li li pOnce the committee reviews the forecast and assumptions, then, the full board reviews it in an Executive Session. The board asks questions and provides advice as well. This review process happens with all three forecasts for the year./p /li /olh3Approving Financial Reports/h3 pAs we move through the year, our Operations Manager and CFO team work together to close the books each month. This ensures our monthly actuals are correct. Then, our CFO team creates a monthly financial report that includes our financial statements (Income Statement and Balance Sheet) for the finance committee to review and approve. Each month the finance committee meets virtually and the entire team reviews the most recently prepared report. After asking questions and providing advice, the committee approves the report./p pThe full board receives copies of the financial reports quarterly and is asked to review and approve the statements for the preceding three months. Board members can ask questions, provide advice, and approve the statements in Executive Session or in the public board meeting. After approval, I write a blog post so the community can access and review the financial statements. You can see an example of the a href= rel=nofollowQ3 2016 financial statement blog here/a. The board just approved the Q4 2016 financials and I will do a blog post shortly to share the financial statements./p h3Financial Audits/h3 pEvery two or three years the Association contracts to have the financial practices and transactions audited.  For the years that we do not conduct a full audit, we will contract for a “financial review” by our CPA firm (which is separate from our CFO firm) to ensure our financial policies and transactions are in good order./p pAn audit is an objective examination and evaluation of the financial statements of an organization to make sure that the records are a fair and accurate representation of the transactions they claim to represent. It can be done internally by employees of the organization, or externally by an outside firm.  Because we want accountability, we contracted with an external CPA firm, McDonald Jacobs, to handle the audit./p pThe Drupal Association conducts audits for several reasons:/p olli pto demonstrate our commitment to financial transparency./p /li li pto assure our community that we follow appropriate procedures to ensure that the community funds are being handled with care.  /p /li li pto give our board of directors outside assurance that the financial statements are free of material misstatements./p /li /olpWhat do the auditors look at?  For 2016, our auditors will generally focus on three points:/p ulli pProper recording of income and expense: Auditors will ensure that our financial statements are an accurate representation of the business we have conducted. Did we record transactions on the right date, to the right account, and the right class? In other words, if we said that 2016 revenue was a certain amount, is that really true?/p /li li pFinancial controls: Preventing fraud is an important part of the audit. It is important to put the kinds of controls in place that can prevent common types of fraud, such as forged checks and payroll changes. Auditors look to see that there are two sets of eyes on every transaction, and that documentation is provided to verify expenses and check requests./p /li li pPolicies and procedures: There are laws and regulations that require we have certain policies in place at our organization. Our auditors will look at our current policies to ensure they were in place and, in some cases, had been reviewed by the board and staff./p /li /ulpThe primary goal of the audit is for the auditor to express an opinion on two aspects of the financial statements of the Association: the financial statements are fairly presented, and they are in accordance with generally accepted accounting principles (GAAP). Generally accepted accounting principles are the accepted body of accounting rules and policies established by the accounting profession. The purpose of these rules is to promote consistency and fairness in financial reporting throughout the business community. These principles provide comparability of financial information./p pOnce our audit for 2016 is complete and approved by the board (expected in early summer), we can move to have the 990 prepared.  We look to have this item completed by September 2016./p h3Tax Filing: The Form 990/h3 pAs a U.S.-based 501c3 exempt organization, and to maintain this tax-exempt status, the U.S. Internal Revenue Service (IRS) requires us to file a 990 each year. Additionally, this form is also filed with state tax departments as well. The 990 is meant for the IRS and state regulators to ensure that non-profits continue to serve their stated charitable activities. The 990 can be helpful when you are reviewing our programs and finances, but know that it’s only a “snapshot” of our year.  /p pa href= rel=nofollowYou can find our past 990s here./a/p pHere are some general points, when reviewing our 990./p h3FORM 990, PART I—REVENUES, EXPENSES, AND CHANGES IN NET ASSETS OR FUND BALANCES/h3 pLines 8-12 indicates our yearly revenue revenue. Not only how much total revenue (line 12), but also where we have earned our income, broken out into four groups. Line 12 is the most important: total income for the year./p pstrong id=docs-internal-guid-be9d333e-25e4-1282-f642-cd2e15d8314aimg alt= src=/files/image1_8.png //strong/p pLines 13-18 shows expenses for the year, and where we focused./p pCash Reserves are noted on lines 20-22 on page 1./p pstrong id=docs-internal-guid-be9d333e-25e4-928f-689b-ad25ccb0642aimg alt= src=/files/image2_4.png //strong/p pThe 990 has a comparison of the net assets from last year (or the beginning of the year) and the end of the current year, as well as illustrates the total assets and liabilities of the Association./p h3FORM 990, PART II—STATEMENT OF FUNCTIONAL EXPENSES/h3 pPart II shows our expenditures by category and major function (program services, management and general, and fundraising)./p h3FORM 990, PART III—STATEMENT OF PROGRAM SERVICE ACCOMPLISHMENTS/h3 pIn Part III, we describe the activities performed in the previous year that adhere to our 501c3 designation.  You can see here that, DrupalCon and our Fiscal Sponsorship programs are noted./p h3FORM 990, PART IV—BALANCE SHEETS/h3 pPart IV details our assets and liabilities. Assets are our resources that we have at our disposal to execute on our mission.  Liabilities are the outstanding claims against those assets./p h3FORM 990, PART V—LIST OF OFFICERS, DIRECTORS, TRUSTEES AND KEY EMPLOYEES/h3 pPart V lists our board and staff who are responsible in whole or in part for the operations of an organization. These entries do include titles and compensation of key employees./p h3FORM 990, PART VI—OTHER INFORMATION/h3 pThis section contains a number of questions regarding our operations over the year. Any “yes” answers require explanation on the following page./p h4Schedule A, Part II—Compensation of the Five Highest Paid Independent Contractors for Professional Services/h4 pWe list any of our contractors, if we have paid them more than $50,000, on this schedule./p pOnce our 990 is complete and filed we are required to post the return publicly, which we do a href= rel=nofollowhere on our website/a.  We expect to have the 2016 990 return completed, filed and posted by September 2017./p pPhew. I know that was long. Thank you for taking the time to read all of the steps we take to ensure financial health and accuracy. We are thankful for the great team work that goes into this process. Most of all we are thankful for our funders who provide the financial fuel for us to do our mission work./p pStay tuned for our next blog in this series: Update on Q4 2016 financial (to follow up on our a href= rel=nofollowQ3 2016 financial update/a)/p/div/div/div

Drupal core announcements: Media entity support now in Drupal 8.4.x

Sat, 05/20/2017 - 00:57
pThe important first step for media support in core just landed in Drupal 8.4.x: a href= new beta experimental Media module/a to support storing media of various types. While Drupal core already has generic file upload and image upload support, the new module will support asset reuse and be extensible to support video, remote media, embedding, and so on./p pThis is a huge testament to individuals and organizations with shared interests pulling together, figuring out how to make it happen in core, and getting it done. 89 individuals (both volunteering their own time and from various companies all across the world) contributed both directly in the core patch and via involvement with the contributed Media Entity module:/p pimg src=/files/media_credit_2.png //p pThat said, this is just the first step. (If you go and enable the core Media module, all it can do right now is give you an error message that no media types can be created.) The next steps are to add a a href= media plugin/a and an a href= media plugin/a so these types of media may be created on the site with the module. Then, widgets and formatters for the upload field and image field interfaces will be added so we can reproduce the existing core functionality with media. a href= Adam Hoenich wrote up a concise summary/a of the next steps, and granular details are listed in a href= followup roadmap/a./p pThere are definitely more tasks than people available, so your contributions would be more than welcome! Now is the time to make sure media is integrated in a way that your projects can best utilize it. Get involved through the media IRC meetings happening at 2pm GMT every week in #drupal-media. (See a href= title= for more information on Drupal IRC). Or, if you are available at other times, ask in the channel. The a href= are listed on the Media Initiative plan/a./p pLet's put the remaining pieces in place together!/p

Drupal core announcements: Modernizing JavaScript in Drupal 8

Sat, 05/20/2017 - 00:17
pWe are modernizing our JavaScript by moving to ECMAScript 6 (ES6) for core development. ES6 is a major update to JavaScript that includes dozens of new features. In order to move to ES6, contributors will have to use a new workflow. For more details, see the a href= record/a. We have adopted the a href= coding standards/a for ES6 code./p

Drupal Association blog: Providing Insight Into Drupal Association Financials

Fri, 05/19/2017 - 21:56
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpIt is critical that the Drupal Association remains financially sustainable so we can fulfill our a href= rel=nofollowmission/a into the future. As a non-profit organization based in the United States, the responsibility of maintaining financial health falls on the Executive Director and the a href= rel=nofollowDrupal Association Board/a./p pAssociation board members, like all board members for US-based organizations, have three legal obligations: a href= rel=nofollowduty of care, duty of loyalty, and duty of obedience/a. Additionally, there is a lot of practical work that the board undertakes. These generally fall under the a href= rel=nofollowfiduciary responsibilities/a, which includes overseeing financial performance./p pThe Drupal Association’s sustainability impacts everyone in the community. For this reason, we want to provide more insight into our financial process and statements with a series of blog posts covering the following topics:/p ulli pHow we create forecasts, financial statements, and ensure accounting integrity/p /li li pUpdate on Q4 2016 financial (to follow up on our a href= rel=nofollowQ3 2016 financial update/a)/p /li li pWhich countries provide funding and which countries are served by that funding (a question asked in the recent public board meeting by a community member)/p /li /ulpIf you would like additional topics covered, please tell us via the comments section. /p/div/div/div

ThinkShout: Skipping a Version - Migrating from Drupal 6 to Drupal 8 with Drupal Migrate

Fri, 05/19/2017 - 14:30
pI recently had the opportunity to migrate content from a Drupal 6 site to a Drupal 8 site. This was especially interesting for me as I hadn’t used Drupal 6 before. As you’d expect, there are some major infrastructure changes between Drupal 6 and Drupal 8. Those differences introduce some migration challenges that I’d like to share./p pThe a href= module/a is a wonderful thing. The vast majority of node-based content can be migrated into a Drupal 8 site with minimal effort, and for the content that doesn’t quite fit, there are custom migration sources. A custom migration source is a small class that can provide extra data to your migration in the form of source fields. Typically, a migration will map source fields to destination fields, expecting the fields to exist on both the source node type and destination node type. We actually published an in-depth, a href= blog series about how we use Drupal Migrate/a to populate Drupal sites with content in conjunction with Google Sheets in our own projects./p pIn the following example, we are migrating the value of content_field_text_author from Drupal 6 to field_author in Drupal 8. These two fields map one-to-one:/p div class=language-yaml highlighter-rougepre class=highlightcodespan class=sid/spanspan class=pi:/span span class=sbook/span span class=slabel/spanspan class=pi:/span span class=sBook/span span class=smigration_group/spanspan class=pi:/span span class=sd6/span span class=sderiver/spanspan class=pi:/span span class=sDrupal\node\Plugin\migrate\D6NodeDeriver/span span class=ssource/spanspan class=pi:/span span class=skey/spanspan class=pi:/span span class=smigrate/span span class=starget/spanspan class=pi:/span span class=sd6/span span class=splugin/spanspan class=pi:/span span class=sd6_node/span span class=snode_type/spanspan class=pi:/span span class=sbook/span span class=sprocess/spanspan class=pi:/span span class=sfield_author/spanspan class=pi:/span span class=scontent_field_text_author/span span class=sdestination/spanspan class=pi:/span span class=splugin/spanspan class=pi:/span span class=sentity:node/span /code/pre /div pThis field mapping works because content_field_text_author is a table in the Drupal 6 database and is recognized by the Migrate module as a field. Everyone is happy./p pHowever, in Drupal 6, it’s possible for a field to exist only in the database table of the node type. These tables look like this:/p div class=language-sql highlighter-rougepre class=highlightcodespan class=nmysql/spanspan class=ogt;/span span class=kDESC/span span class=ncontent_type_book/spanspan class=p;/span span class=o+/spanspan class=c1----------------------------+------------------+------+-----+---------+-------+/span span class=o|/span span class=nField/span span class=o|/span span class=kType/span span class=o|/span span class=kNull/span span class=o|/span span class=kKey/span span class=o|/span span class=kDefault/span span class=o|/span span class=nExtra/span span class=o|/span span class=o+/spanspan class=c1----------------------------+------------------+------+-----+---------+-------+/span span class=o|/span span class=nvid/span span class=o|/span span class=nint/spanspan class=p(/spanspan class=mi10/spanspan class=p)/span span class=nunsigned/span span class=o|/span span class=kNO/span span class=o|/span span class=nPRI/span span class=o|/span span class=mi0/span span class=o|/span span class=o|/span span class=o|/span span class=nnid/span span class=o|/span span class=nint/spanspan class=p(/spanspan class=mi10/spanspan class=p)/span span class=nunsigned/span span class=o|/span span class=kNO/span span class=o|/span span class=nMUL/span span class=o|/span span class=mi0/span span class=o|/span span class=o|/span span class=o|/span span class=nfield_text_issue_value/span span class=o|/span span class=nlongtext/span span class=o|/span span class=nYES/span span class=o|/span span class=o|/span span class=kNULL/span span class=o|/span span class=o|/span span class=o+/spanspan class=c1----------------------------+------------------+------+-----+---------+-------+/span /code/pre /div pIf we want to migrate the content of field_text_issue_value to Drupal 8, we need to use a custom migration source./p pCustom migration sources are PHP classes that live in the src/Plugin/migrate/source directory of your module. For example, you may have a PHP file located at src/Plugin/migrate/source/BookNode.php that would provide custom source fields for a Book content type./p pA simple source looks like this:/p div class=language-php highlighter-rougepre class=highlightcodenamespace Drupal\custom_migrate_d6\Plugin\migrate\source; use Drupal\node\Plugin\migrate\source\d6\Node; /** * @MigrateSource( * id = d6_book_node, * ) */ class BookNode extends Node { /** * @inheritdoc */ public function query() { $query = parent::query(); $query-gt;join('content_type_book', 'book', 'n.nid = book.nid'); $query-gt;addField('book', 'field_text_issue_value'); return $query; } } /code/pre /div pAs you can see, we are using our migration source to modify the query the Migrate module uses to retrieve the data to be migrated. Our modification extracts the field_text_issue_value column of the book content type table and provides it to the migration as a source field./p pTo use this migration source, we need to make one minor change to change to our migration. We replace this:/p pplugin: d6_node/p pWith this:/p pplugin: d6_book_node/p pWe do this because our migration source extends the standard Drupal 6 node migration source in order to add our custom source field./p pThe migration now contains two source fields and looks like this:/p div class=language-yaml highlighter-rougepre class=highlightcodespan class=sid/spanspan class=pi:/span span class=sbook/span span class=slabel/spanspan class=pi:/span span class=sBook/span span class=smigration_group/spanspan class=pi:/span span class=sd6/span span class=sderiver/spanspan class=pi:/span span class=sDrupal\node\Plugin\migrate\D6NodeDeriver/span span class=ssource/spanspan class=pi:/span span class=skey/spanspan class=pi:/span span class=smigrate/span span class=starget/spanspan class=pi:/span span class=sd6/span span class=splugin/spanspan class=pi:/span span class=sd6_book_node/span span class=snode_type/spanspan class=pi:/span span class=sbook/span span class=sprocess/spanspan class=pi:/span span class=sfield_author/spanspan class=pi:/span span class=scontent_field_text_author/span span class=sfield_issue/spanspan class=pi:/span span class=sfield_text_issue_value/span span class=sdestination/spanspan class=pi:/span span class=splugin/spanspan class=pi:/span span class=sentity:node/span /code/pre /div pYou’ll find you can do a lot with custom migration sources, and this is especially useful with legacy versions of Drupal where you’ll have to fudge data at least a little bit. So if the Migrate module isn’t doing it for you, you’ll always have the option to step in and give it a little push./p

Jeff Geerling's Blog: Call for Sessions is open for DrupalCamp St. Louis 2017 - come and speak!

Fri, 05/19/2017 - 04:13
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedp style=text-align: center;a href= src=// width=200 height=200 alt=DrupalCamp St. Louis logo - Fleur de Lis class=insert-image style=border: none; //a/p pa href=https://2017.drupalstl.orgDrupalCamp St. Louis 2017/a will be held strongSeptember 22-23, 2017/strong, in St. Louis, Missouri. This will be our fourth year hosting a DrupalCamp, and we're one of the best camps for new presenters!/p pIf you did something amazing with Drupal, if you're an aspiring themer, site builder, or developer, or if you are working on making the web a better place, we'd love for you to a href= a session/strong/a. Session submissions are due by August 1./p/div/div/div

Brian Osborne: Keeping a view of upcoming events fresh in Drupal 8

Fri, 05/19/2017 - 01:34
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpImagine you have a view that lists upcoming events on your Drupal 8 site. There's a date filter that filters out any event who's start date is less than the current date. This works great until you realize that the output of the view will be cached in one or many places (dynamic page cache, internal page cache, varnish, etc). Once it's cached, views doesn't execute the query and can't compare the date to the current time, so you may get older events sticking around./p/div/div/div

Dries Buytaert: Friduction: the internet's unstoppable drive to eliminate friction

Fri, 05/19/2017 - 01:02
figure class=figurediv class=img style=border: 1px solid #ccc; display: inline-block img src= style=display:block alt= //div /figurepThere is one significant trend that I have noticed over and over again: the internet's continuous drive to mitigate friction in user experiences and business models./p pSince the internet's commercial debut in the early 90s, it has captured success and upset the established order by a href= unnecessary middlemen/a. Book stores, photo shops, travel agents, stock brokers, bank tellers and music stores are just a few examples of the kinds of middlemen who have been eliminated by their online counterparts. The act of buying books, printing photos or booking flights online alleviates the friction felt by consumers who must stand in line or wait on hold to speak to a customer service representative./p pRather than interpreting this evolution as disintermediation or taking something away, I believe there is value in recognizing that the internet is constantly improving customer experiences by reducing friction from systems — a process I like to call friduction. /p h3Open Source and cloud/h3 pOver the past 15 years, I've watched open source and cloud computing solutions transform content management into a href= experience management/a. Specifically, I have observed open source and cloud-computing solutions remove friction from legacy approaches to technology. Open source takes the friction out of the technology evaluation and adoption process; you are not forced to get a demo or go through a sales and procurement process, or deal with the limitations of a proprietary license. Cloud computing also took off because it also offers friduction; with cloud, companies pay for what they use, avoid large up-front capital expenditures, and gain speed-to-market./p h3Cross-channel experiences/h3 pTechnology will continue to work to eliminate inefficiencies, and today, emerging distribution platforms will continue to improve user experience. There is a reason why a href='s API-first initiative/a is one of the topics I've a href= and written/a the most about in 2016; it enables Drupal to move beyond the page and integrate with different user engagement systems. We're quickly headed to a world where a href= are evolving into cross­channel experiences/a, which includes push notifications, conversational UIs, and more. Conversational UIs, such as chatbots and voice assistants, will eliminate certain inefficiencies inherent to traditional websites. These technologies will prevail because they improve and redefine the customer experience. In fact, a href= Labs was founded last year/a to explore how we can help customer bring these browser-less experiences to market./p h3Personalization and contextualization/h3 pIn the 90s, personalization meant that websites could address authenticated users by name. I remember the first time I saw my name appear on a website; I was excited! Obviously personalization strategies have come a long way since the 90s. Today, websites present recommendations based on a user's most recent activity, and consumers expect to be provided with highly tailored experiences. The drive for greater personalization and contextualization will never stop; there is too much value in removing friction from the user experience. When a commerce website can predict what you like based on past behavior, it eliminates friction from the shopping process. When a customer support website can predict what question you are going to ask next, it is able to provide a better customer experience. This is not only useful for the user, but also for the business. A more efficient user experience will translate into higher sales, improved customer retention and better brand exposure./p pTo keep pace with evolving user expectations, tomorrow's digital experiences will need to deliver more tailored, and even predictive customer experiences. This will require organizations to consume multiple sources of data, such as location data, historic clickstream data, or information from wearables to create a fine-grained user context. Data will be the foundation for predictive analytics and personalization services. Advancing user privacy in conjunction with data-driven strategies will be an important component of enhancing personalized experiences. Eventually, I believe that a href= experiences will be the norm/a./p pAt Acquia, we started investing in contextualization and personalization in 2014, through the release of a product called a href= Lift/a. Adoption of Acquia Lift has grown year over year, and we expect it to increase for years to come. Contextualization and personalization will become more pervasive, especially as different systems of engagements, big data, the internet of things (IoT) and machine learning mature, combine, and begin to have profound impacts on what the definition of a great user experience should be. It might take a few more years before trends like personalization and contextualization are fully adopted by the early majority, but we are patient investors and product builders. Systems like Acquia Lift will be of critical importance and premiums will be placed on orchestrating the optimal customer journey./p h3Conclusion/h3 pThe history of the web dictates that lower-friction solutions will surpass what came before them because they eliminate inefficiencies from the customer experience. Friduction is a long-term trend. Websites, the internet of things, augmented and virtual reality, conversational UIs — all of these technologies will continue to grow because they will enable us to build lower-friction digital experiences./p

Lullabot: Modernizing JavaScript in Drupal 8

Fri, 05/19/2017 - 00:00
Mike and Matt host two of Drupal's JavaScript maintainers, Théodore Biadala and Matthew Grill, as well as Lullabot's resident JavaScript expert Sally Young, and talk about the history of JavaScript in Drupal, and attempts to modernize it.

Third Grove: Using the Batch API and hook_update_N in Drupal 8

Thu, 05/18/2017 - 23:07
span property=schema:name class=field-name--titleUsing the Batch API and hook_update_N in Drupal 8/span span class=field-name--uid rel=schema:authorspan lang= about= typeof=schema:Person property=schema:name datatype= xml:lang=ed/span/span span property=schema:dateCreated content=2017-05-18T21:07:27+00:00 class=field-name--createdThu, 05/18/2017 - 17:07/span

agoradesign: How Drupal Commerce 2.x improved my skills

Thu, 05/18/2017 - 22:59
div class=field field-name-body field-type-text-with-summary field-label-hidden div class=field-items div class=field-item evenBeing one of the first early adopters of Drupal Commerce 2.x by starting our first project in early 2016 (on alpha2 version) and soon after a second one, I originally planned to write a blog post soon after beta1 gets published. Unfortunately I was too busy at that time..../div /div /div

Blair Wadman: End of life of Mollom. What can you use instead?

Thu, 05/18/2017 - 17:57
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpAcquia has announced that they will be ending the life of Mollom. As of April 2018, they will no longer support the product./p pYou have over a year to find a replacement. I am currently using Mollom and planning on changing mine now. Chances are, if I don't, I'll forget to change it closer to the time!/p/div/div/div

Promet Source: Supporting Global Accessibility Awareness Day

Thu, 05/18/2017 - 14:43
Thursday, May 18 2017 marks the sixth annual Global Accessibility Awareness Day (GAAD). The purpose of GAAD is to get everyone talking, thinking and learning about digital (web, software, mobile, etc.) access/inclusion and people with different disabilities. Promet Source is proud to support GAAD as we help our clients achieve equal access for all across their digital properties. Blog: AGILEDROP: DrupalCon sessions about Project Management

Thu, 05/18/2017 - 10:04
a href= src= //a Last time, we gathered together DrupalCon Baltimore sessions about Case Studies. We promised that we will also look in some other areas. Therefore, we will this time explore the sessions from Project Management. Project Managers ARE the new Content Strategists by Lynn Winter from August Ash The session is about Project Managers being a content strategist. They become so because nobody has money to pay for a content strategist. Therefore, a session walks you through the discovery, design, and build phases of a website redesign sharing tips, tools, and examples of steps you can take to… a href= MORE/a

Kalamuna Blog: Lessons from Our Drupal 8 Blog Migration

Wed, 05/17/2017 - 23:29
span class=field field--name-title field--type-string field--label-hiddenLessons from Our Drupal 8 Blog Migration/span div class=field field--name-field-featured-image field--type-image field--label-hidden field__item img src= alt=Storefront with sign that reads Early Learning Centre title= width=870 height=330 //div span class=field field--name-uid field--type-entity-reference field--label-hiddenspanShannon O'Malley/span/span span class=field field--name-created field--type-created field--label-hiddenWed, 05/17/2017 - 14:29/span div class=clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__itemp dir=ltrLate last year, we upgraded our blog from Drupal 7 to Drupal 8. Our main objective was to invest in our skills within Kalamuna so we could, in turn, better serve our clients. We have a lot of Drupal 8 migrations lined up over the course of the next year or so, and we foresee many more coming down the pipeline. This gave us a chance to learn the ins and outs of Drupal 8, with the added value of sprucing up our very own blog. This post is a summary of takeaways from our experience that I hope will help you on your own Drupal 8 adventures./p/div div class=field field--name-field-featured-categories field--type-entity-reference field--label-above div class=field__labelCategories/div div class=field__items div class=field__itema href= hreflang=enArticles/a/div div class=field__itema href= hreflang=enDrupal/a/div div class=field__itema href= hreflang=enGit/a/div div class=field__itema href= hreflang=enGuidance/a/div div class=field__itema href= hreflang=enInformation Architecture/a/div div class=field__itema href= hreflang=enResponsive Design/a/div /div /div Drupal 6 security update for Legal

Wed, 05/17/2017 - 16:29
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpemAs you may know, a href= 6 has reached End-of-Life (EOL)/a which means the Drupal Security Team is no longer doing Security Advisories or working on security patches for Drupal 6 core or contrib modules - but the a href= 6 LTS vendors/a are and we're one of them!/em/ppstrongToday, there is a Moderately Critical security release for an Access Bypass vulnerability the Legal module./strong/pp class=p1span class=s1The a href= module dspanisplays your Terms amp; Conditions to users who want to register, and requires that they accept the Tamp;C before their registration is accepted./span/span/pp class=p1span class=s1spanIt had a bug where a specially crafted URL could allow anyone to login to a user account that hadn't yet accepted the terms and conditions. This is mitigated by the fact that an attacker must have a way to obtain the URL, possibly by snooping on web traffic that isn't protected via HTTPS or a man-in-the-middle attack./span/span/pp class=p1span class=s1span(strongA note about the timing of this release:/strong per our agreement with the Drupal Security Team, we were unable to release this patch until the same vulnerability was fixed for the Drupal 7 Legal module, or two weeks went by after that module was unsupported, if it appeared it wasn't going to be fixed. The fix for Drupal 7 was a href= today/a.)/span/span/ppHere you can download a href= Drupal 6 patch/a./ppIf you have a Drupal 6 site using the Legal module, we recommend you update immediately! We have already deployed the patch for all of our Drupal 6 Long-Term Support clients. :-)/ppstrongIf you'd like all your Drupal 6 modules to receive security updates and have the fixes deployed the same day they're released, please a href= out our D6LTS plans/a./strong/ppemNote: if you use the a href= module (totally free!), you'll be alerted to these and any future security updates, and will be able to use drush to install them (even though they won't necessarily have a release on

Code Positive: Easy effective testing for Drupal 8 sites with Behat 3

Wed, 05/17/2017 - 13:13
a href= src= width=940 height=230 alt=Testing for Drupal 8 sites with Behat 3 title=Testing for Drupal 8 sites with Behat 3 typeof=Image class=image-style-rss-banner //a pThe easiest way to effectively test your Drupal 8 site - Behat 3 with the Behat Drupal extension is an incredible tool for keeping your project out of trouble./p pa href= MORE/a/p p /p