Drupal Planet

Syndicate content
Drupal.org - aggregated feeds in category Planet Drupal
Updated: 8 hours 12 min ago

Urban Insight: Redesigning a site as a long-term project

Mon, 05/02/2016 - 11:00am
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpOne of the earliest sites developed by Urban Insight is a href=http://www.planetizen.com/ target=_blankplanetizen.com/a. It still remains one of biggest sites that we actively develop and maintain. When the site was upgraded from Drupal 5 to 7 a few years back we had to plan and implement a full content migration. That is, we built a brand new Drupal 7 site from scratch and migrated all data and settings from the Drupal 5 site./p/div/div/div
Categories: Drupal Feeds

Sooper Drupal Themes: Drupal Drupal CMS 1.0 and Glazed Premium 2.4.8 Arrived: Cool New Features and Better Views Integration

Mon, 05/02/2016 - 10:48am
div class=field-content-banner glazed-util-float-right float-right a href=http://bit.ly/1MRJwVWimg typeof=foaf:Image class=img-responsive src=http://www.sooperthemes.com/sites/default/files/default_images/sooperthemes_1.png alt= //a /div div class=field-body ph3Glazed Drupal CMS 1.0/h3 pAfter over 100 git commits over 4 weeks, including weekends and late nights I can present to you Glazed 2.4.8. This release includes not only an update to the premium Drupal theme and the drag and drop builder: the Glazed Drupal CMS distribution on drupal.org finally reached the strong1.0 milestone/strong! The backend distribution started as an experiment 2 years ago. I tried to find the perfect bundle of features to jump-start development of Drupal CMS websites.After nearly 100 beta releases I finally settled on the formula for features and flexibility that is now in the Glazed Drupal CMS 1.0 release. To make the distribution truly useful, it of course had to have a beautiful theme, and the distro now includes a free slimmed down version of our best-selling Glazed framework theme: a href=https://www.drupal.org/project/glazed_freeGlazed Free/a./p h3Glazed Drupal CMS 1.0 Features/h3 ul liFully Loaded WYSIWYG Editor/li liBuilt In Media Library/li liemGlazed Free/em Theme included/li liMultilevel Responsive Main Menu/li liBlog Content amp; Views/li liPortfolio Content amp; Views/li liEvent Content amp; Views/li liEvent Registration/li liNews Content amp; Views/li liBootstrap 3 integrated/li liSEO Optimized/li liDemo Content Included/li /ul ul/ul div class=field-blog-image field-inline first last img typeof=foaf:Image class=img-responsive src=http://www.sooperthemes.com/sites/default/files/styles/bootstrap3_col9/public/blog-images/glazed-2.4.8-sooper6-blog-header_0.png?itok=dyoUDImr width=848 height=300 / /div pa href=https://www.drupal.org/project/cmsGlazed Drupal CMS on Drupal.org/a/p p/p p/p p/p p class=text-mutedGlazed 2.4.8 Comes with a ton of improvements, bug fixes and shiny new demo pages!/p h2Glazed 2.4.8 Release Highlights/h2 pa href=http://glazed-demo.sooperthemes.comimg class=media-element file-default img-responsive typeof=foaf:Image src=https://www.sooperthemes.com/sites/default/files/glazed-collage1_0.jpg alt= //a/p h3 class=st-title bg-glazedSearch all the things!/h3 pFull screen search is a really exciting new UI feature in Glazed. Search is becoming a key factor in navigation on increasingly large and dynamic websites. Thanks to our full screen search design you can provide a unified search experience no mobile and desktop. The search feature is based on Drupal's core search, with just a theming and behavioral overlay by Glazed. This means you can use all your favorite search modules and plugins along with our full screen UI./p pWe added this search enhancement with the goal of powering larger, more dynamic sites. If you have any ideas to further improve our search be sure to hit the comments! (One thing I'm looking at is using the Fast Autocomplete emfac /emmodule)./p p style=text-align: center;a href=http://glazed-demo.sooperthemes.comimg style=width: 70%; class=stpe-dropshadow stpe-dropshadow--raised center-block media-element file-default img-responsive typeof=foaf:Image src=https://www.sooperthemes.com/sites/default/files/ezgif-3673350173.gif alt= //a/p p style=text-align: center;a href=http://glazed-demo.sooperthemes.comView Full Screen Search demo/a/p h3/h3 h3 class=st-title bg-glazedStunning Animations At Your Fingertips/h3 pIt has never been easier to create stunning animations. We added a new demo page to to showcases our newly added emfloating animation/em. This page is also great for learning how you can use animations and apply in your own projects. If you are interested in our improved animation features check out the animation page. If you want to try the animation engine, to spin up a private demo at a href=http://trysooperthemes.comtrysooperthemes.com/a./p pMy goal at SooperThemes is to strike a balance between features, performance, and usability. I actually cut the animate.css library in half, because it had some many animations that are just ridiculous and have no place in a professional product. I then added the custom floating animation for our new emApple style /emdemo page and the whole animation library clocks in at just 4kb. It only loads on pages with animations, because we care about performance./p p style=text-align: center;a href=http://glazed-demo.sooperthemes.com/elements/interactive-elements/animation-glazed-carbide-builderimg style=width: 70%; class=stpe-dropshadow stpe-dropshadow--raised center-block media-element file-default img-responsive typeof=foaf:Image src=https://www.sooperthemes.com/sites/default/files/ezgif-3956036713.gif alt= //a/p p style=text-align: center;a href=http://glazed-demo.sooperthemes.com/elements/interactive-elements/animation-glazed-carbide-builderView Animation Demo Page/a/p pEnjoy easy animations for callouts, meaningful content enhancement or simply to impress your client or improve website visitor engagement. Or just for fun, but don't overdo it./p p/p h3 class=st-title bg-glazedGridStack Views: Stack Your Featured Content/h3 pWe've been working on features that will be used for our future Magazine designs for Glazed. This is one of them. Using the GridStack JS library and our easy to use Views integration, you can create dynamic stacks of your most important content. The views plugin gives you total control over layout, gap size, colors, all inside the Views module. You can use it for homepage headers, footers, or even for a full-page gridstack with all your content!/p pThis is one of those little features that make your content more fun to interact with, and more personalized./p p style=text-align: center;a href=http://www.sooperthemes.com/drupal-modules/glazed-gridstackimg style=width: 70%; class=stpe-dropshadow stpe-dropshadow--raised center-block media-element file-default img-responsive typeof=foaf:Image src=https://www.sooperthemes.com/sites/default/files/gridstack.jpg alt= //a/p p style=text-align: center;Creating custom stacks:/p p style=text-align: center;a href=http://www.sooperthemes.com/drupal-modules/glazed-gridstackimg style=width: 70%; class=stpe-dropshadow stpe-dropshadow--raised center-block media-element file-default img-responsive typeof=foaf:Image src=https://www.sooperthemes.com/sites/default/files/ezgif-3611537110.gif alt= //a/p p style=text-align: center;a href=http://www.sooperthemes.com/drupal-modules/glazed-gridstackView GridStack Module Page/a/p p/p nbsp; h3 class=st-title bg-glazedCarousels For All Content/h3 pThere are 2 kinds of sliders in our Carbide Builder drag and drop tool. This first is a Bootstrap based simple image slider. Then There is the Carousel Element, which is like a swiss army knife of sliders. It will do regular sliders, fading sliders, carousels, and more. It will slide anything you throw at it, including videos, images, and HTML content with layouts./p pThe Carousel element gives you the awesome power of the Owl Carousel library at your fingertips. Here is an example slider that I created by copying the Position Elements container demo contet in 2 slides:/p p style=text-align: center;a href=http://glazed-demo.sooperthemes.com/elements/layout-elements/carousel-elementimg style=width: 70%; class=stpe-dropshadow stpe-dropshadow--raised center-block media-element file-default img-responsive typeof=foaf:Image src=https://www.sooperthemes.com/sites/default/files/ezgif-3454239687.gif alt= //a/p p style=text-align: center;a href=http://glazed-demo.sooperthemes.com/elements/layout-elements/carousel-elementView Carousel Demo Page/a/p p style=text-align: center;a href=http://glazed-demo.sooperthemes.com/elements/layout-elements/positioned-layers-containerView Positioned Layers Demo Page/a/p p style=text-align: center;/p p style=text-align: center;/p nbsp; p/p nbsp; h3 class=st-title bg-glazedImproving Drupal Views Integration/h3 pThe most exciting improvements in 2.4.8 to me are all in the Views integration. We tested and improved exposed filter integration. The awesome power of views' exposed filters and sorting is that unlike with contextual filters you get a human-friendly form that allows you to personalize the view. When exposing a category filter, you get a nice hierarchical selectbox to choose a category. When you want to exposenbsp; something more massive like a node:author field you can use an autocomplete field./p pThe power of views integration will become more obvious when we start release magazine designs for Glazed. Keep an eye on the blog/newsletter!/p h3 class=st-title bg-glazedNew Pages in the Glazed 2.4.8 Main Demo/h3 pAll new and updated demo pages:/p ul lia href=http://glazed-demo.sooperthemes.com/elements/interactive-elements/animation-glazed-carbide-builderAnimation Engine/a/li lia href=http://glazed-demo.sooperthemes.com/elements/layout-elements/carousel-elementCarousel/a/li lia href=http://glazed-demo.sooperthemes.com/elements/layout-elements/positioned-layers-containerPositioned Elements/a/li lia href=http://glazed-demo.sooperthemes.com/elements/interactive-elements/social-linksSocial Links/a/li lia href=http://glazed-demo.sooperthemes.com/elements/content-elements/gridstack-viewGridStack/a/li lia href=http://glazed-demo.sooperthemes.com/elements/media-elements/google-mapsGoogle Maps/a/li lia href=http://glazed-demo.sooperthemes.com/elements/media-elements/iconsIcons/a/li lia href=http://glazed-demo.sooperthemes.com/elements/interactive-elements/drupal-blocksDrupal Blocks/a/li lia href=http://glazed-demo.sooperthemes.com/elements/interactive-elements/drupal-viewsDrupal Views/a/li lia href=http://glazed-demo.sooperthemes.com/elements/media-elements/drop-shadowDrop Shadows/a/li lia href=http://glazed-demo.sooperthemes.com/elements/media-elements/motion-image-boxMotion Boxes/a/li lia href=http://glazed-demo.sooperthemes.com/portfolioPortfolio/aem (now with 4:3 image styles)/em/li lia href=http://glazed-demo.sooperthemes.com/elements/content-elements/tabsTabs/a/li lia href=http://glazed-demo.sooperthemes.com/elements/media-elements/video-elementVideo Element/a/li lia href=http://glazed-demo.sooperthemes.com/elements/media-elements/image-element-sliderImage Slider amp; Element/a/li lia href=http://glazed-demo.sooperthemes.com/elements/interactive-elements/revolution-sliderRevolution Slider/a/li /ul p/p pFor a complete list of changes check out the Glazed and Carbide Builder changelogs:/p pa href=http://www.sooperthemes.com/documentation/changelogCHANGELOG/a Glazed Themebr a href=http://www.sooperthemes.com/documentation/changelog-carbide-builderCHANGELOG/a Carbide Builder/p h3 class=st-title bg-glazedImproving Drupal's Distribution Experience/h3 p style=text-align: center;img style=width: 70%; class=stpe-dropshadow stpe-dropshadow--raised center-block media-element file-default img-responsive typeof=foaf:Image src=https://www.sooperthemes.com/sites/default/files/glazed-installer.jpg alt= //p pSince Distribtuions were announced as a feature for Drupal I thought it was a great idea, and now SooperThemes is working on making distributions even better. I think we are the first distribution to have a custom build option but that is just the beginning. We are currently testing strongAuto-Deploy amp; Install/strong tools that we've been working on for 4 months. (Think fully automatic deployment and installation on your server or even shared hosting)./p h3 class=st-title bg-glazedBonus GIF/h3 p style=text-align: center;Here's a GIF image of our completely re-architected multi-level responsive main menu:/p p style=text-align: center;img style=width: 70%; class=stpe-dropshadow stpe-dropshadow--raised center-block media-element file-default img-responsive typeof=foaf:Image src=https://www.sooperthemes.com/sites/default/files/documentation-files/main-menu-mobile.gif alt= //p p/p h3 class=st-title bg-glazedLimited Time Offer/h3 p class=text-muted style=text-align: center;a href=http://www.sooperthemes.com/pricingimg style=width: 70%; class=center-block media-element file-default img-responsive typeof=foaf:Image src=https://www.sooperthemes.com/sites/default/files/248_0.png alt= //abr Active for a very limited time!/p p class=text-center style=text-align: center;a class=btn btn-primary btn-lg glazed-util-background-accent2 href=http://www.sooperthemes.com/pricingJoin SooperThemes Today!/a/p p class=text-muted style=text-align: center;emTo upgrade your existing account click your subscription in the sooperthemes.com toolbar and choose Add Plan or Change Plan./em/p p/p p/p pstrongHave a great day!/strong/p p!--break--/p /div
Categories: Drupal Feeds

Drupal Association News: Make it official with your certificate of membership

Mon, 05/02/2016 - 10:07am
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpToday we begin our first membership campaign of the year. It’s all about making your contribution official with a personalized certificate of membership./p pIn our 4th year of running this campaign, we hope that you will help us by either joining the Drupal Association or by letting others know about this opportunity. Members who join or renew from now through June 30 will be sent a certificate. Our goal is to send 675 certificates, which is a 10% increase from last year’s final count./p pa class=action-button href=https://assoc.drupal.org/become-certified-drupal-association-memberMake it official/a/p pIt wouldn’t be fun if we did not have some challenge for our members, however. So here it is: if you refer 5 or more members to us during this campaign, we will give you a shoutout on this blog and on Twitter. If your company refers 5 or more members during the campaign, we’ll publicly acknowledge your company as well. (When you refer someone, tell them they can mention you when they sign up.)/p pWe love the creativity of the Drupal community and we look forward to seeing how you share about this campaign. If you are a member and you want your certificate so you can do something fun like this, a href=mailto:lizz@association.drupal.org?subject=I'd%20like%20a%202016%20certificate%20of%20membershipamp;body=Please%20send%20a%20certificate%20of%20membership%20to%20me%20for%202016.%20I%20plan%20to%20share%20it%20and%20help%20recruit%20new%20members.%0AThe%20member's%20name%20for%20the%20certificate%20should%20be%3A%0AThis%20is%20where%20I'll%20share%20the%20certificate%3A%20%0Ajust ask and we’ll send it to you/a./p div blockquote class=twitter-tweet data-lang=en width=250px align=left p lang=en dir=ltr xml:lang=enThank you! RT a href=https://twitter.com/DJRitendra@DJRitendra/a: a href=https://twitter.com/DrupalAssoc@DrupalAssoc/a Glad To be part of a href=https://twitter.com/hashtag/DrupalAssoc?src=hash#DrupalAssoc/a :) a href=https://twitter.com/hashtag/Drupal?src=hash#Drupal/a a href=https://twitter.com/DJRitendra@DJRitendra/a a href=http://t.co/fVaBA5MGPIpic.twitter.com/fVaBA5MGPI/a/p p— Drupal Association (@DrupalAssoc) a href=https://twitter.com/DrupalAssoc/status/606140368640458752June 3, 2015/a/p/blockquote script async= src=//platform.twitter.com/widgets.js charset=utf-8/scriptblockquote class=twitter-tweet data-lang=en width=250px align=left p lang=en dir=ltr xml:lang=enThanks for your support! RT a href=https://twitter.com/GambinoVin@GambinoVin/a: My Certificate of membership! a href=https://twitter.com/DrupalAssoc@DrupalAssoc/a a href=https://twitter.com/brightlemon@brightlemon/a a href=http://t.co/CyFqhgZNZFpic.twitter.com/CyFqhgZNZF/a/p p— Drupal Association (@DrupalAssoc) a href=https://twitter.com/DrupalAssoc/status/609359189870252032June 12, 2015/a/p/blockquote script async= src=//platform.twitter.com/widgets.js charset=utf-8/script/div div style=clear:left;/div /div/div/divdiv class=field field-name-taxonomy-vocabulary-4 field-type-taxonomy-term-reference field-label-abovediv class=field-labelPersonal blog tags:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/taxonomy/term/334Membership/a/div/div/div
Categories: Drupal Feeds

Larry Garfield: Moving to a new Platform

Mon, 05/02/2016 - 9:02am
pAfter my a href=http://www.garfieldtech.com/blog/leaving-palantirlast post/a, a number of people asked if I was leaving Drupal all together. Perish the thought. :-) However, after a decade at Palantir.net and the five-year Wagnerian Saga that was the Drupal 8 development cycle (complete with a href=https://www.youtube.com/watch?v=7zvCOKzY3kAsinging/a), I have been asking myself What next?/p pWell, what do I like to do? I like to build. I like to teach. I like to make things better. I like to work with smart people, as colleagues, as community partners, and as customers. I want to be able to have an impact in making something better for other people./p pTo that end, I am pleased to announce that today is my first day as Director of Runtimes, Integrations, and Services for a href=http://platform.shPlatform.sh/a./p pa href=http://www.garfieldtech.com/blog/joining-platformsh target=_blankread more/a/p
Categories: Drupal Feeds

Drupalize.Me: Dig into Drupal 8 at DrupalCon

Mon, 05/02/2016 - 8:15am
div class=field field-name-body field-type-text-with-summary field-label-hidden text-content text-secondarydiv class=field-itemsdiv class=field-item evenpDrupalCon is almost here and it’s time to start filling out your schedule. There’s a lot to do and see (not to mention eating lots of great New Orleans food!), so we definitely recommend having at least a rough game plan for how to use your time. Here’s a look at things you should be considering, especially if you are looking to take away a lot of Drupal 8 knowledge./p /div/div/divdiv id=comment-wrapper-nid-2577/div
Categories: Drupal Feeds

Flocon de toile | Freelance Drupal: Drupal 8 : Inject a contact form inside a content type in 5 steps

Mon, 05/02/2016 - 8:07am
div class=field field--name-body field--type-text-with-summary field--label-hidden field--itempHow to insert a contact form inside a content Drupal 8? Or on a specific page in a specific location ? By default, contact forms created have a dedicated page. But if we want to use them elsewhere. After some research, I almost thought I should write a few lines of code to create a specific Plugin./p pBut contact forms, like almost everything now in Drupal 8, are entities. Finally, place a contact form, or any other form besides, is a simplicity that had eluded me until now./p/div
Categories: Drupal Feeds

DrupalEasy: DrupalEasy Podcast 174 - Floss Belt (Ryan Szrama - Drupal Commerce)

Mon, 05/02/2016 - 7:02am
pa href=https://drupaleasy.podbean.com/mf/play/kectku/DrupalEasy_ep174_20160502.mp3Direct .mp3 file download./a/p pRyan Szrama (a href=https://www.drupal.org/u/rszramarszrama/a), President and CEO of a href=https://commerceguys.comCommerce Guys/a, project leader of a href=https://www.drupal.org/project/commerceDrupal Commerce/a, and proud ex-Best Buy Geek Squad member joins Ryan, Ted, and Mike for a comprehensive discussion Commerce Guys' recent relaunch as a standalone company, and the current development progress of Drupal Commerce for Drupal 8. We also discussed Drupal 8.1, a potential future for the theme layer, the absolute correct pronunciation of Szrama, and a big announcement from Ted./p h2Interview/h2 ullia href=https://commerceguys.com/blog/commerce-guys-refocusing-drupal-commerce-platformsh-becomes-independent-companyCommerce Guys Refocusing on Drupal Commerce as Platform.sh Becomes an Independent Company/a blog post. /li lia href=https://drupalcommerce.orghttps://drupalcommerce.org/a, especially the a href=https://drupalcommerce.org/blogblog/a for updates on 8.x-2.0. /li lia href=http://docs.drupalcommerce.orghttp://docs.drupalcommerce.org/a /li liMeta for checkout issues (base form to be inlcuded in alpha4): a href=https://www.drupal.org/node/2710973https://www.drupal.org/node/2710973/a /li liPayment roadmap issue (target for beta1 at DrupalCon): a href=https://www.drupal.org/node/2711013https://www.drupal.org/node/2711013/a /li /ulh2DrupalEasy News/h2 ulliDrupalEasy and SixMileTech team up for a href=https://events.drupal.org/neworleans2016/training/module-developmentIntroduction to Drupal 8 Module Development/a at DrupalCon New Orleans./li lia href=https://play.google.com/music/listen?u=0#/ps/I563aaw7k5rdnq4ofqlzlchiv5iDrupalEasy Podcast now on Google Play/a. /li lia href=http://reddit.com/r/drupaleasypodcastDrupalEasyPodcast on Reddit/a - upvote stories you'd like us to cover. /li /ulh2Three Stories/h2 ullia href=https://www.drupal.org/blog/drupal-8-1-0Drupal 8.1 is now available/a. /li lia href=https://www.drupal.org/node/2702061Unify amp; simplify render amp; theme system: component-based rendering (enables pattern library, style guides, interface previews, client-side re-rendering)/a - issue by a href=https://www.drupal.org/u/wim-leersWim Leers/a. /li lia href=https://www.mydropwizard.com/blog/why-you-shouldnt-upgrade-drupal-6Why you SHOULDN'T upgrade from Drupal 6!/a - blog post by a href=https://www.drupal.org/u/dsnopekDavid Snopek/a. /li /ulh2Sponsors/h2 ullia href=http://webenabled.comWebEnabled.com/a - a href=https://devpanel.comdevPanel/a /li /ulh2Picks of the Week/h2 ulliMike - a href=https://www.drupal.org/project/bootstrapBootstrap/a base theme. /li liTed - a href=https://events.drupal.org/neworleans2016/sessions/size-just-number-reflecting-community-growth-mentoring-and-where-we-spendIs size just a number? Reflecting on community growth, mentoring, and where we spend our efforts/a DrupalCon session by a href=https://www.drupal.org/u/davidhernandezDavid Hernandez/a and a href=https://www.drupal.org/u/kgoelKalpana Goel/a. /li liRyan P - a href=https://www.drupal.org/project/registry_rebuildRegistry Rebuild and --fire-bazooka/a for when you move between environments. /li liRyan S - a href=https://www.cloudflare.comCloudflare/a. /li /ulh2Upcoming Events/h2 ullia href=http://drupalcon.orgDrupalCon New Orleans/a - May 9-13, 2016. /li /ulh2Follow us on Twitter/h2 ullia href=http://twitter.com/drupaleasy@drupaleasy/a /li lia href=http://twitter.com/andrewmriley@andrewmriley/a /li lia href=http://twitter.com/liberatr@liberatr/a /li lia href=http://twitter.com/ultimike@ultimike/a /li lia href=http://twitter.com/tedbow@tedbow/a /li lia href=http://twitter.com/sixmiletech@sixmiletech/a /li lia href=http://twitter.com/akalata@akalata/a /li lia href=http://twitter.com/ryanszrama@ryanszrama/a /li /ulh2Five Questions (answers only)/h2 olliKayaking /li liClash Royale /li liBecome a beverage professional /li liLlamas /li liDrupalCon Barcelona 2007 /li /olh2Intro Music/h2 pa href=https://www.youtube.com/watch?v=KDwODbl3muEThe Dean Scream/a./p h2Subscribe/h2 pa href=https://itunes.apple.com/us/podcast/drupaleasy-podcast/id305745575Subscribe to our podcast on iTunes/a, a href=https://play.google.com/music/listen?u=0#/ps/I563aaw7k5rdnq4ofqlzlchiv5iGoogle Play/a or a href=http://www.getmiro.com/Miro/a. Listen to our podcast on a href=http://stitcher.com/s?fid=28701amp;refid=stprStitcher/a./p pIf you'd like to leave us a voicemail, call 321-396-2340. Please keep in mind that we might play your voicemail during one of our future podcasts. Feel free to call in with suggestions, rants, questions, or corrections. If you'd rather just send us an email, please use our a href=http://DrupalEasy.com/contactcontact page/a./pdiv class=feedflare a href=http://feeds.feedburner.com/~ff/DrupalEasy?a=w5ZlxTLzv30:kTGYrKrPIjQ:yIl2AUoC8zAimg src=http://feeds.feedburner.com/~ff/DrupalEasy?d=yIl2AUoC8zA border=0/img/a a href=http://feeds.feedburner.com/~ff/DrupalEasy?a=w5ZlxTLzv30:kTGYrKrPIjQ:qj6IDK7rITsimg src=http://feeds.feedburner.com/~ff/DrupalEasy?d=qj6IDK7rITs border=0/img/a /divimg src=http://feeds.feedburner.com/~r/DrupalEasy/~4/w5ZlxTLzv30 height=1 width=1 alt=/
Categories: Drupal Feeds

Dries Buytaert: Handling context in outside-in

Mon, 05/02/2016 - 4:28am
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpIn a recent post we talked about how introducing a href=http://buytaert.net/turning-drupal-outside-inoutside-in experiences/a could improve the Drupal site-building experience by letting you immediately edit simple configuration without leaving the page. In a follow-up blog post, we provided a href=http://buytaert.net/examples-of-how-to-make-drupal-outside-inconcrete examples/a of how we can apply outside-in to Drupal./p pThe feedback was overwhelmingly positive. However, there were also some really important questions raised. The most common concern was the idea that the mockups ignored context./p pWhen we showed a href=http://buytaert.net/examples-of-how-to-make-drupal-outside-inhow to place a block outside-in/a, we placed it on a single page. However, in Drupal a block can also be made visible for specific pages, types, roles, languages, or any number of other contexts. The flexibility this provides is one place where Drupal shines./p h3Why context matters/h3 pFor the sake of simplicity and focus we intentionally did not address how to handle context in outside-in in the last post. However, incorporating context into outside-in thinking is fundamentally important for at least two reasons: /p ollistrongManaging context is essential to site building./strong Site builders commonly want to place a block or menu item that will be visible on not just one but several pages or to not all but some users. A key principle of outside-in is previewing as you edit. The challenge is that you want to preview what site visitors will see, not what you see as a site builder or site administrator./li listrongManaging context is a big usability problem on its own./strong Even without outside-in patterns, making context simple and usable is an unsolved problem. Modules like Context and Panels have added lots of useful functionality, but all of it happens away from the rendered page./li /olh3The ingredients: user groups and page groups/h3 pTo begin to incorporate context into outside-in, a href=https://www.drupal.org/u/tkolearyKevin Oleary/a, with input from a href=https://www.drupal.org/u/yoroyyoroy/a, a href=https://www.drupal.org/u/bojhanBojhan/a, a href=https://www.drupal.org/u/webchickAngie Byron/a, a href=https://drupal.org/u/gabor-hojtsyGábor Hojtsy/a and others, has iterated on the block placement examples that we presented in the last post, to incorporate some ideas for how we can make context outside-in. We're excited to share our ideas and we'd love your feedback so we can keep iterating./p pTo solve the problem, we recommend introducing 3 new concepts: /p ollistrongPage groups:/strong re-usable collections of URLs, wildcards, content types, etc./li listrongUser groups:/strong reusable collections of roles, user languages, or other user attributes./li listrongImpersonation:/strong the ability to view the page as a user group./li /olh4Page groups/h4 pMost sites have some concept of a section or type of page that may or may not equate to a content type. A commerce store for example may have a kids section with several product types that share navigation or other blocks. emPage groups/em adapts to this by creating reusable bundles of content consisting either of a certain type (e.g. all research reports), or of manually curated lists of pages (e.g. a group that includes /home, /contact us, and /about us), or a combination of the two (similar to a href=https://www.drupal.org/project/contextContext module/a but context never provided an in-place UI)./p h4User groups/h4 pemUser groups/em would combine multiple user contexts like role, language, location, etc. Example user groups could be Authenticated users logged in from the United States, or Anonymous users that signed up to our newsletter. The goal is to combine the massive number of potential contexts into understandable bundles that can be used for context and impersonation./p h4Impersonation/h4 pAs mentioned earlier, a challenge is that you want to preview what site visitors will see, not what you see as a site builder or site administrator. Impersonation allows site builders to switch between different user groups. Switching between different user groups allow a page to be previewed as that type of user./p h3Using page groups, user groups and impersonation/h3 pLet's take a look at how we use these 3 ingredients in an example. For the purpose of this blog post, we want to focus on two use cases:/p olliI'm a site builder working on a life sciences journal with a paywall and I want to place a block called Download report next to all entities of type Research summary (content type), but only to users with the role Subscriber (user role)./li liI want to place a block called Access reports on the main page, the About us page, and the Contact us page (URL based), and all research summary pages, but only to users who are anonymous users./li /olpThings can get more complex but these two use cases are a good starting point and realistic examples of what people do with Drupal./p h4Step #1: place a block for anonymous users/h4 pLet's assume the user is a content editor, and the user groups Anonymous and Subscriber as well as the page groups Subscriber pages and Public pages have already been created for her by a site builder. Her first task is to place the Access reports block and make it visible only for anonymous users./p pfigure class=figurebr /div class=img style=border: 1px solid #ccc; display: inline-blockimg src=http://buytaert.net/sites/buytaert.net/files/images/blog/outside-in-block-placement-anonymous.gif style=display: block; alt=Place a block for anonymous users //div pfigcaptionFirst the editor changes the impersonation to Anonymous then she places the block. She is informed about the impact of the change./figcaption/p/figure/p h4Step #2: place a block for subscribers/h4 pOur editor's next task is to place the Download reports block and make it visible only for subscribers. To do that she is going to want to view the page as a subscriber. Here it's important that this interactions happens smoothly, and with animation, so that changes that occur on the page are not missed./p pfigure class=figurebr /div class=img style=border: 1px solid #ccc; display: inline-blockimg src=http://buytaert.net/sites/buytaert.net/files/images/blog/outside-in-block-placement-subscriber.gif style=display: block; alt=Place a block for subscribers //div pfigcaptionThe editor changes the impersonation to Subscribers. When she does the Access reports block is hidden as it is not visible for subscribers. When she places the Download report block and chooses the Subscriber pages page group, she is notified about the impact of the change./figcaption/p/figure/p h4Step #3: see if you did it right/h4 pOnce our editor has finished step one and two she will want to go back and make sure that step two did not undo or complicate what was done in step one, for example by making the Download report block visible for Anonymous users or vice versa. This is where impersonation comes in./p pfigure class=figurebr /div class=img style=border: 1px solid #ccc; display: inline-blockimg src=http://buytaert.net/sites/buytaert.net/files/images/blog/outside-in-impersonate.gif style=display: block; alt=Confirm you did it right //div pfigcaptionThe anonymous users need to see the Access reports block and subscribers need to see the Download report block. Impersonation lets you see what that looks like for each user group./figcaption/p/figure/p h3Summary/h3 pThe idea of combining a number of contexts into a single object is not new, both context and panels do this. What is new here is that when you bring this to the front-end with impersonation, you can make a change that has broad impact while seeing it exactly as your user will./p /div/div/div
Categories: Drupal Feeds

Janez Urevc: Media entity reaches 8.x-1.0!

Mon, 05/02/2016 - 3:00am
spanMedia entity reaches 8.x-1.0!/span spanspan lang= about=/users/slashrsm typeof=schema:Person property=schema:name datatype=slashrsm/span/span spanMon, 02.05.2016 - 10:00/span div class=field field--name-body field--type-text-with-summary field--label-hidden field--itempMore than two years ago I gave a href=https://www.youtube.com/watch?v=4giCe2GNnLQa session about the future of media at DrupalCon Prague/a. The outcome of that session was a href=https://groups.drupal.org/node/327768a planning sprint/a that happened two days after it. One of the ideas that was born on that sprint was a href=https://drupal.org/project/media_entityMedia entity/a, storage layer for media-related information built with simplicity and support for remotely hosted media in mind. It's development started shortly after that and got significantly accelerated in the spring of the next year, when the core of the media initiative met at NYC Camp and a href=https://groups.drupal.org/node/418803agreed on the common battle plan for Drupal 8/a./p pMedia entity and it's plugins have been pretty stable for the last few months. It seemed to be almost ready for it's first release, but there were few tickets in the issue queue which I wanted to resolve first. In the last few days I found some time to look at those. Together with a href=https://drupal.org/u/paranojikTadej Baša (@paranojik)/a we managed to finish all of the most important patches, which allowed me to tag 8.x-1.0 yesterday. I am thrilled and extremely proud. A lot of individuals and organizations invested many hours to make this possible and I would like to thank every single one of them. Special thanks go to a href=http://nyccamp.org/NYC Camp organizers/a, who organized two sprints and have been supporting us from the beginning, a href=http://examiner.comExaminer.com/a, my ex employer who allowed me to spend significant amount of my time to work on many media-related modules and a href=http://www.md-systems.ch/MD Systems/a, who organized two media sprints and let part of their a href=http://www.md-systems.ch/en/blog/2016-02/media-management-in-drupal-8team to work on Drupal 8 media for 3 months/a./p pAlong with the main module I released some of it's plugins too: a href=https://drupal.org/project/media_entity_imageImage/a, a href=https://drupal.org/project/media_entity_slideshowSlideshow/a, a href=https://drupal.org/project/media_entity_twitterTwitter/a and a href=https://drupal.org/project/media_entity_instagramInstagram/a. There are also plugins that handle a href=https://drupal.org/project/video_embed_fieldVideo/a, a href=https://drupal.org/project/media_entity_audioAudio/a and a href=https://drupal.org/project/media_entity_documentDocuments/a, which are also quite ready to be used./p pMedia entity and it's plugins offer many interesting features:/p ullisimple and lean storage for local and remote media, /li liout of the box integration with standard Drupal's tools,/li lipluggable architecture that allows easy implementation of additional plugins, /li li100% automatic delivery of thumbnails,/li lidelivery of remote metadata and/li limapping of remote metadata with entity fields./li /ulpI encourage you to try it and let us know what you think. We are looking for co-maintainers too. If you'd like to spend some time in contrib and have ideas for new features a href=/contactlet me know/a./p pIn the next few weeks we're planning releases of the other media modules. Stay tuned!/p /div
Categories: Drupal Feeds

Valuebound: Profiling Drupal Performance with Webgrind and Xdebug

Mon, 05/02/2016 - 2:25am
pXdebug Profiling is all about measuring the performance of PHP code./p h3br /strongHere we go!/strong/h3 pRequirements:/p olliXdebug, with profiler enabled/li liWebgrind/li liXdebug Addon plugin for browser/li /olpemstrong1. Xdebug with profiler enabled/strong/embr /br / For setting up the environment, edit the php.ini file and add following lines./p pcodexdebug.profiler_enable_trigger = 1/code/p pIf you want the cachegrind in a prefered location, then add the following/p pcodexdebug.profiler_output_dir=/var/www/html/xdebug_profiler/code/p pIf you want a prefered name, add below line of code/p pcodexdebug.profiler_output_name=cachegrind.out.%u.%H_%R/code/p pOnce added, restart the web…/p
Categories: Drupal Feeds

Amazee Labs: Amazee Labs launches Drupal Hoster amazee.io

Mon, 05/02/2016 - 2:14am
spanAmazee Labs launches Drupal Hoster amazee.io/span div class=field field-node--field-lead field-name-field-lead field-type-text-long field-label-hidden div class=field-items div class=field-itempToday’s the day to reconsider your hosting. We are launching amazee.io, a state-of-the-art hosting service with an integrated development and hosting environment. Think of a battle-proven system, automated deployments, full congruence between your development and productive environment, and a very competitive pricing./p p“Why another Drupal hosting provider?” You might ask. Read why: a href=https://stories.amazee.iostories.amazee.io/a /p/div /div /div spana href=/en/user/87 title=View user profile. lang= about=/en/user/87 typeof=schema:Person property=schema:name datatype= class=usernameJohanna Bergmann/a/span spanMon, 05/02/2016 - 09:14/span div class=field field-node--field-image field-name-field-image field-type-image field-label-hidden div class=field-items div class=field-itemimg class=image-style-blog-full src=https://www.amazeelabs.com/sites/default/files/styles/blog_full/public/amazeeio_text_right.png?itok=GtALlV73 width=580 height=271 alt= typeof=foaf:Image / /div /div /div div class=field field-node--body field-name-body field-type-text-with-summary field-label-hidden div class=field-items div class=field-itempAnd if you have not yet on seen our a href=https://www.amazee.iowebsite/a or a href=https://www.amazee.io/sites/default/files/factsheet_amazeeio.pdffactsheet/a let me introduce the team behind the system: Michael Schmid (Schnitzel), CTO; Tyler Ward and Bastian Widmer for DevOps, and myself, who after three great years at the Drupal Association accepted the opportunity to lead the new venture as CEO. We are excited!/p pHope to see you at the upcoming DrupalCon in New Orleans./p/div /div /div
Categories: Drupal Feeds

Red Route: Including SVG icons in a Drupal 8 theme

Sun, 05/01/2016 - 3:46am
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=schema:articleBody content:encodedpI got started with task runners a while ago using Grunt, thanks to a href=https://24ways.org/2013/grunt-is-not-weird-and-hard/an excellent 24 ways article by Chris Coyier/a. Lately I've been using Gulp more, and all the cool kids seem to be going that way, so for the Drupal 8 version of The Gallery Guide, I've decided to use Gulp./p pSince hearing Chris Coyier talk about a href=https://css-tricks.com/svg-sprites-use-better-icon-fonts/SVG icon systems/a, I've been meaning to implement them in my own workflow. I've written about a href=http://capgemini.github.io/frontend/jekyll-svg-iconsa similar setup for Jekyll/a on the Capgemini engineering blog, and wanted to apply something similar to this site./p pThe Gulp setup for this project is almost identical to the one described in that post, so I won't go into too much detail here, but a href=http://www.red-route.org/articles/rebuilding-gallery-guide-openin the spirit of openness/a that's guiding this project, a href=https://github.com/GalleryGuide/gall/blob/master/gulpfile.js#L40the gulpfile is on Github/a./p pIn short, there's a directory of SVG icons within the theme, and there's a Gulp task to combine them into a single file at codeimages/icons.svg/code. Then the contents of that file is injected into the page using a preprocess function. There's a slight gotcha here - if the value is added directly, without going through the codet()/code function, then it automatically gets escaped to block cross-site scripting. It doesn't seem to make sense, according to a href=https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Component%21Render%21FormattableMarkup.php/function/FormattableMarkup%3A%3AplaceholderFormat/8.2.xthe documentation/a, but I needed to pass the value in without any prefix character:/p precode class=language-php function gall_preprocess_page(amp;$variables) { $svg = file_get_contents(drupal_get_path('theme', 'gall') . '/images/icons.svg'); $variables['svg_icons'] = t('svg', array('svg' =gt; $svg)); } /code/pre pIf we were working with user-supplied content, this would be opening up a dangerous attack vector, but given that it's content that I've created myself in the theme, it's safe to trust it./p pHaving done that, in the codepage.html.twig/code template, the variable is available for output:/p precode class=language-twig {{ svg_icons }} /code/pre pThen these files can be referenced - here's a snippet from coderegion--header.html.twig/code:/p precode class=language-markup lt;a href=https://www.twitter.com/thegalleryguide title=Follow us on Twittergt; lt;svg class=icongt; lt;use xlink:href=#twittergt;lt;/usegt; lt;/svggt; lt;/agt; /code/pre pPart of me feels like there should be a more Drupal-ish way of doing this, so that the links are part of a menu. But given that this is my own project, and changing the icons would require a code change, it doesn't feel so bad to have them hard-coded in the template./p /div/div/divdiv class=field field-name-taxonomy-vocabulary-4 field-type-taxonomy-term-reference field-label-above div class=field-labelTags:nbsp;/div div class=field-items div class=field-item evena href=/category/tags/drupal typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Drupal/a/div div class=field-item odda href=/category/tags/drupal-8 typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=Drupal 8/a/div div class=field-item evena href=/category/tags/gallery-guide typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=The Gallery Guide/a/div /div /div a href=/blog/terms class=taxonomy-link-allAll tags/a span rel=schema:url resource=/articles/including-svg-icons-drupal-8-theme class=rdf-meta element-hidden/spanspan property=schema:name content=Including SVG icons in a Drupal 8 theme class=rdf-meta element-hidden/span
Categories: Drupal Feeds

DrupalOnWindows: Cheap Pipe (sort of BigPipe) in Drupal 7

Sun, 05/01/2016 - 12:00am
div class=form-item form-type-item labelLanguage /label English /div div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpemThis post is on how we implemented a simple (yet effective) BigPipe like rendering strategy for Drupal 7./em/p pstrongWhy is big pipe so important?/strong/p p class=rtecenterstrongimg alt= src=http://ws003.universitatpolit.netdna-cdn.com/php_drupalonwindows/sites/default/files/ckfinder_files/1/images/Blogs/2015/44/Big-Pipe-Prod.jpg //strong/p/div/div/divdiv class=view view-read-more view-id-read_more view-display-id-entity_view_1 view-dom-id-0a82662c3174b14d9b1e93afc4211ff3 div class=view-header hr/ h2More articles.../h2 /div div class=view-content div class=item-list ul li class=views-row views-row-1 views-row-odd views-row-first div class=views-field views-field-title span class=field-contenta href=/en/blog/fixing-slow-queries-and-database-deadlocks-drupal-without-php-profiling-toolsFixing slow queries and database deadlocks in Drupal without PHP profiling tools/a/span /div/li li class=views-row views-row-2 views-row-even div class=views-field views-field-title span class=field-contenta href=/en/content/making-namespaced-callbacks-work-drupal-7-without-hacking-core-and-bound-parametersMaking namespaced callbacks work in Drupal 7 (without hacking core and with bound parameters)/a/span /div/li li class=views-row views-row-3 views-row-odd div class=views-field views-field-title span class=field-contenta href=/en/blog/php-com-class-consuming-net-phpPHP COM class: consuming .Net from PHP/a/span /div/li li class=views-row views-row-4 views-row-even div class=views-field views-field-title span class=field-contenta href=/en/blog/bypassing-form-validations-and-required-fields-drupal-bfv-moduleBypassing Form Validations and Required Fields in Drupal: the BFV module./a/span /div/li li class=views-row views-row-5 views-row-odd div class=views-field views-field-title span class=field-contenta href=/en/blog/deploying-drupal-pro-part-1-file-structureDeploying Drupal Like a Pro - Part 1: File Structure/a/span /div/li li class=views-row views-row-6 views-row-even div class=views-field views-field-title span class=field-contenta href=/en/blog/calling-net-framework-and-net-assemblies-phpCalling .Net Framework and .Net Assemblies from PHP/a/span /div/li li class=views-row views-row-7 views-row-odd div class=views-field views-field-title span class=field-contenta href=/en/blog/decent-pdf-generation-drupalDecent PDF generation in Drupal/a/span /div/li li class=views-row views-row-8 views-row-even div class=views-field views-field-title span class=field-contenta href=/en/blog/using-linq-language-integrated-queries-drupal-or-how-write-queries-x5-fasterUsing LINQ (Language Integrated Queries) in Drupal or how to write queries x5 faster/a/span /div/li li class=views-row views-row-9 views-row-odd div class=views-field views-field-title span class=field-contenta href=/en/blog/adding-products-attributes-cart-programmatically-using-ubercartAdding products with attributes to cart programmatically using Ubercart/a/span /div/li li class=views-row views-row-10 views-row-even views-row-last div class=views-field views-field-title span class=field-contenta href=/en/blog/drupal-add-new-operators-views-filters-such-contained-csv-or-how-override-default-viewsDrupal: Add new operators to views filters (such as contained in CSV) or how to override default view#039;s handlers/a/span /div/li /ul/div /div /div
Categories: Drupal Feeds

hussainweb.me: Drupal Meetup Bangalore – March and April 2016

Sat, 04/30/2016 - 11:25pm
Things have gotten busy after DrupalCon Asia which meant that the Drupal meetup we hold in Bangalore every month was a little difficult to organize. Srijan Technologies stepped up and offered their office space in Whitefield, Bangalore. They also took care of snacks and even lunch for all the attendees. Kudos to Srijan for organizing the meetup. Thank you!
Categories: Drupal Feeds

DrupalEasy: Drupal 6 to Drupal 8(.1.x) Custom Content Migration

Sat, 04/30/2016 - 7:45am
pemNote: This blog post is based on Drupal 8.1.x. It is an updated version of a a href=https://www.drupaleasy.com/blogs/ultimike/2016/03/drupal-6-drupal-80x-custom-content-migrationprevious tutorial based on Drupal 8.0.x/a. While the concepts are largely the same as 8.0.x, a refactoring of the core migrate modules took place in Drupal 8.1.x (a href=https://www.drupal.org/node/2625696migrations will become plugins in 8.1.x/a). This updated tutorial updates the previous example to work with Drupal 8.1.x, as well as demonstrates how to specify a migration group and run the migration with Drush. If you're familiar with the previous tutorial, you may want to skip to the Rolling up our sleeves section below./em/p pEven if you're only casually acquainted with Drupal 8, you probably know that the core upgrade path to Drupal 8 has been completely rewritten from the ground-up, using many of the concepts of the a href=https://www.drupal.org/project/migrateMigrate/a and a href=https://www.drupal.org/project/migrate_d2dDrupal-to-Drupal migration/a modules. Using the a href=https://www.drupal.org/project/migrate_upgradeMigrate upgrade/a module, it is possible to migrate much of a Drupal 6 (or Drupal 7) site to Drupal 8 with a minimum of fuss (DrupalEasy.com is a prime example of this). Migrate upgrade is similar to previous Drupal core upgrade paths - there are no options to pick-and-choose what is to be migrated - it's all-or-nothing. This blog post provides an example of how to migrate content from only a single, simple content type in a Drupal 6 site to a Drupal 8.1.x site, without writing any PHP code at all./p h2Setting the table/h2 pFirst, some background information on how the Drupal 8 Migrate module is architected. The Migrate module revolves around three main concepts:/p ulliSource plugins - these are plugins that know how to get the particular data to be migrated. Drupal's core Migrate module only contains base-level source plugins, often extended by other modules. Most Drupal core modules provide their own source plugins that know how to query Drupal 6 and Drupal 7 databases for data they're responsible for. For example, the Drupal 8 core Node module contains source plugins for Drupal 6 and Drupal 7 nodes, node revisions, node types, etc… Additionally, contributed and custom modules can provide additional source plugins for other CMSes (WordPress, Joomla, etc…), database types (Oracle, MSSQL, etc…), and data formats (CSV, XML, JSON, etc.) /li liProcess plugins - these are plugins designed to receive data from source plugins, then massage it into the proper form for the destination on a per-field basis. Multiple process plugins can be applied to a single piece of data. Drupal core provides various a href=https://www.drupal.org/node/2129651useful process plugins/a, but custom and contributed modules can easily implement their own./li liDestination plugins - these are plugins that know how to receive data from the process plugins and create the appropriate Drupal 8 thing. The Drupal 8 core Migrate module contains general-purpose destination plugins for configuration and content entities, while individual modules can extend that support where their data requires specialized processing. /li /ulpTogether, the Source -gt; Process -gt; Destination structure is often called the pipeline./p pIt is important to understand that for basic Drupal 6 to Drupal 8 migrations (like this example), all of the code is already present - all the developer needs to do it to configure the migration. It is much like preparing a meal where you already have a kitchen full of tools and food - the chef only needs to assemble what is already there./p pThe configuration of the migration for this example will take place completely in two custom .yml files that will live inside of a custom module. In the end, the custom module will be quite simple - just a .info.yml file for the module itself, and two .yml files for configuring the migration./p h2Reviewing the recipe/h2 pFor this example, the source Drupal 6 site is a large site, with more than 10 different content types, thousands of nodes, and many associated vocabularies, users, profiles, views, and everything else that goes along with an average Drupal site that has been around for 5+ years. The client has decided to rewrite the entire site in Drupal 8, rebuilding virtually the entire site from the ground-up - but they wanted to migrate a few thousand nodes from two particular content types. This example will demonstrate how to write a custom migration for the simpler of the two content types./p pThe external article content type to be migrated contains several fields, but only a few of consequence:/p ulliTitle - the node's title /li liPublication source - a single line, unformatted text field /li liLocation - a single line, unformatted text field /li liExternal link - a field of type link /li /ulpSome additional notes:/p ulliThe Body field is unused, and does not need to be migrated. /li liThe existing data in the Author field is unimportant, and can be populated with UID=1 on the Drupal 8 site. /li liThe node will be migrated from type ext_article to article. /li /ulpSeveral factors make this a particularly straight-forward migration:/p ulliThere are no reference fields at all (not even the author!) /li liAll of the field types to be migrated are included with Drupal 8 core. /li liThe Drupal 6 source plugin for nodes allows a type parameter, which is super-handy for only migrated nodes of a certain type from the source site. /li /ulh2Rolling up our sleeves/h2 pWith all of this knowledge, it's time to write our custom migration. First, create a custom module with only an .info.yml file (a href=https://drupalconsole.comDrupal Console/a's generate:module command can do this in a flash.) List the Migrate Drupal (migrate_drupal) and Migrate Plus modules as dependencies. The Migrate Drupal module dependency is necessary for some of its classes that contain functionality to query Drupal 6 databases, while the Migrate Plus module dependency is required because custom migrations are now plugins that utilize the MigrationConfigEntityPluginManager provided by Migrate Plus (a href=http://mikeryan.name/blog/mikeryan/migration-update-for-drupal-8-1full details in a blog post by Mike Ryan/a)./p pNext, create a migration group by creating a migrate_plus.migration_group.mygroup.yml file. The purpose of a migration group is to be able to group related migrations together, for the benefit of running them all at once as well as providing information common to all the group migrations (like the source database credentials) in one place./p pThe shared_configuration -gt; source -gt; key value of legacy corresponds to a database specified in the Drupal 8 site's settings.php file. For example:/p pNext, create a new migrate_plus.migration.external_articles.yml file in /config/install/. Copy/paste the contents of Drupal core's /core/modules/node/migration_templates/d6_node.yml file into it. This migration template is what all node migrations are based on when running the Drupal core upgrade path. So, it's a great place to start for our custom migration. emNote that the file name begins with migrate_plus.migration - this is what allows our custom migration to utilize the Migrate Plus module's MigrationConfigEntityPluginManager./em/p pThere's a few customizations that need to be made in order to meet our requirements:/p ulliChange the id and label of the migration to something unique for the project. /li liAdd the migration_group: mygroup to add this migration to the group we created above. This allows this migration access to the Drupal 6 source database credentials. /li liFor the source plugin, the d6_node migration is fine - this source knows how to query a Drupal 6 database for nodes. But, by itself, it will query the database for nodes, regardless of their type. Luckily, the d6_node plugin takes an (optional) node_type parameter. So, we add ext_article as the node_type. /li liWe can remove the nid and vid field mappings in the process section. The Drupal core upgrade path preserves source entity ids, but as long as we're careful with reference fields (in our case, we have none), we can remove the field mappings and let Drupal 8 assign new node and version ids for incoming nodes. Note that we're not migrating previous node revisions, only the current revision./li liChange the type field mapping from a straight mapping to a static value using the default_value process plugin. This is what allows us to change the type of the incoming nodes from ext_article to just article. /li liSimilarly, change the uid field mapping from a straight mapping to a static_value of 1, which assigns the author of all incoming nodes to the UID=1 user on the Drupal 8 site. /li liSince we don't have any body field data to migrate, we can remove all the body field mappings. /li liAdd a mapping for the Publication source. On the Drupal 6 site, this field's machine name is field_source, on the Drupal 8 site, the field's machine name is field_publication_source. Since it is a simple text field, we can use a direct mapping. /li liAdd a direct mapping for field_location. This one is even easier than the previous because the field name is the same on both the source and destination site. /li liAdd a mapping for the source External link field. On the Drupal 6 site, the machine name is field_externallinktarget, while on the Drupal 8 site, it has been changed to field_external_link. Because this is a field of type link, we must use the d6_cck_link process plugin (provided by the Drupal 8 core Link module). This process plugin knows how to take Drupal 6 link field data and massage it into the proper form for Drupal 8 link field data. /li liFinally, we can remove all the migration dependencies, as none of them are necessary for this simple migration. /li /ulpThe resulting file is:/p pNote that .yml files are super-sensitive to indentation. Each indentation must be two spaces (no tab characters)./p h2Serving the meal/h2 pTo run the migration, first enable the custom module. The act of enabling the module and Drupal core's reading in of the migration configuration could trigger an error if the configuration isn't formatted properly. For example, if you misspelled the d6_node source plugin as db_node, you'll see the following error:/p precode[Error] The db_node plugin does not exist. /code/prepIf the module installs properly, the Drush commands provided by the a href=https://www.drupal.org/project/migrate_toolsMigrate Tools/a (8.x-2.x-dev - 2016-Apr-12 or later) module can be used to manage the migration. First, use the Drush migrate-status command (alias: ms) can be run to confirm that the migration configuration exists. This is similar to functionality in Drupal 7's Migrate module./p precode~/Sites/drupal8migrate $ drush ms Group: mygroup Status Total Imported Unprocessed Last imported enternal_articles Idle 602 602 0 2016-04-29 16:35:53 /code/prepFinally, using Drush, the migration can be run using the migrate-import (alias: mi) command:/p precode~/Sites/drupal8migrate $ drush mi external_articles Processed 602 items (602 created, 0 updated, 0 failed, 0 ignored) - done with 'external_articles' /code/prepSimilarly, the migration can be rolled back using the drush migrate-rollback (alias: rm) command:/p precode~/Sites/drupal8migrate $ drush migrate-rollback external_articles Rolled back 602 items - done with 'external_articles' /code/prepOnce the migration is complete, navigate over to your Drupal 8 site, confirm that all the content has been migrated properly, then uninstall the custom module as well as the other migrate-related modules./p pNote that the Migrate module doesn't properly dispose of its tables (yet) when it is uninstalled, so you may have to manually remove the migrate_map and migrate_message tables from your destination database./p h2Odds and ends/h2 ulliOne of the trickier aspects about writing custom migrations is updating the migration configuration on an installed module. There are several options: ulliThe a href=https://www.drupal.org/project/config_develConfiguration development/a module provides a codeconfig-devel-import-one/code (cdi1) drush command that will read a configuration file directly into the active store. For example: codedrush cdi1 modules/custom/mymodule/config/install/migrate.migration.external_articles.yml/code/li liDrush core provides a codeconfig-edit/code command that allows a developer to directly edit an active configuration. /li liFinally, if you're a bit old-school, you can uninstall the module, then use the drush php command to run codeDrupal::configFactory()-gt;getEditable('migrate.migration.external_articles)-gt;delete();/code, then reinstall the module. /li /ul/li liSometimes, while developing a custom migration, if things on the destination get really dirty, I've found that starting with a fresh DB helps immensely (be sure to remove those migrate_ tables as well!) /li /ulh2Additional resources/h2 ullia href=https://www.drupal.org/node/2668742Migrations are now plugins change record/a /li lia href=http://mikeryan.name/blog/mikeryan/migration-update-for-drupal-8-1Migration Update for Drupal 8.1/a - blog post by Mike Ryan. /li lia href=http://www.jeffgeerling.com/blog/2016/migrate-custom-json-feed-drupal-8-migrate-source-jsonMigrate a custom JSON feed in Drupal 8 with Migrate Source JSON/a blog post by Jeff Geerling. /li lia href=https://drupalize.me/blog/201604/custom-drupal-drupal-migrations-migrate-toolsCustom Drupal-to-Drupal Migrations with Migrate Tools/a - blog post by William Hetherington. /li /ulpemThanks to a href=https://www.drupal.org/u/mikeryanMike Ryan/a and a href=https://www.drupal.org/u/mu5a5hiJeffrey Phillips/a for reviewing this post prior to publication./em/pdiv class=feedflare a href=http://feeds.feedburner.com/~ff/DrupalEasy?a=HXHuHo9wkbQ:osahgAYBSS8:yIl2AUoC8zAimg src=http://feeds.feedburner.com/~ff/DrupalEasy?d=yIl2AUoC8zA border=0/img/a a href=http://feeds.feedburner.com/~ff/DrupalEasy?a=HXHuHo9wkbQ:osahgAYBSS8:qj6IDK7rITsimg src=http://feeds.feedburner.com/~ff/DrupalEasy?d=qj6IDK7rITs border=0/img/a /divimg src=http://feeds.feedburner.com/~r/DrupalEasy/~4/HXHuHo9wkbQ height=1 width=1 alt=/
Categories: Drupal Feeds

hussainweb.me: Porting token module to Drupal 8

Fri, 04/29/2016 - 11:50pm
Now, token is a module everyone needs and no one knows, especially after token is mostly in core since Drupal 7. How can that still be dev two months after Drupal 8 final?!
Categories: Drupal Feeds

Aten Design Group: Introducing Entity Query API for Drupal 8

Fri, 04/29/2016 - 3:26pm
pDrupal 8 lays the foundation for building robust and flexible RESTful APIs quickly and efficiently. Combine this with Drupal’s best-in-class fieldable entity model and it becomes incredibly easy to construct systems that solve many different problems well./p pOut of the box, Drupal 8 comes with core modules for all of the standard RESTful HTTP methods, GET, POST, PATCH, and DELETE. These endpoints are entity specific. Collection endpoints - endpoints that deal with entities in aggregate - are another story. The solution offered is the Views module./p pIn a headless or API intensive site however, core Drupal 8 and Views are limited by a major shortcoming. Support for querying your entity content over an API is limited to only the custom views that you create. This means that you must first create a view for any content that you want to expose. Filtering is limited to only the filters you explicitly enable and there’s no clear solution for fine-grained control over sorting and paging your results via query strings - the common practice for RESTful APIs. This creates a lot of development overhead for headless and API intensive sites which will inevitably end up with innumerable views./p pCreating publicly available APIs would be worse yet. Typically, you would like a public API to allow your consumers to discover and access your data as they see fit. Managing each view for all your entity types becomes increasingly difficult with every new field added or new entity type. This issue makes sense, the Views module’s original intent was to provide prescribed aggregations of your content, possibly modified by a few contextual items like the current path or the current user. Views were never intended to be an all-purpose query tool for the end user./p pEnter a href=https://www.drupal.org/project/entityqueryapiEntity Query API/a. Entity Query API allows API consumers to make queries against any entity in Drupal. From users, to nodes, to configuration entities, this is an incredibly powerful tool. By creating a standardized set of parameters for crafting these queries, Entity Query API allows developers to create generalized tooling not tied to particular views or entities. Moreover, they need not worry about creating matching views for every collection of content. This ability to let API consumers craft their own result-set further reinforces the separation of concerns between the client and the server./p pEntity Query API does all this by taking advantage of the excellent a href=https://api.drupal.org/QueryInterfaceQueryInterface/a provided by Drupal Core. The module simply translates your request URI and associated query string into an entity query on the backend, executes it, and returns the results as JSON. By using this, we also get the built in access control that Drupal entity queries provide./p pEntity Query API is still in alpha (as of April 2016), but it fully supports everything that you can do with an entity query in code, i.e., conditions, condition groups, sorting, ranges, etc. Like the REST UI module, we have a similar configuration page for enabling queryable entities. We support all core authentication methods as well as a href=https://www.drupal.org/project/jwtJSON Web Token Authentication/a (another module we’ve built). In future, we’d like to dynamically collect any authentication providers available, just like the REST UI module./p pI’m going to be sprinting on Entity Query API at DrupalCon New Orleans on Monday, May 9th 2016 and during the after-DrupalCon sprints on Friday, May 13th 2016. We’d like to add support for other encodings like XML and HAL+JSON (currently the module just supports JSON). Finally, we’d like to add the option to retrieve just entity IDs instead of fully loaded entities./p pAs always, there’s plenty of work to be done in open source. If you’re interested in Entity Query API, come find me during the sprints or send me a tweet anytime during DrupalCon, my handle is @gabesullice. Of course, the easiest way to help is just to a href=https://www.drupal.org/project/entityqueryapidownload the module/a and report any bugs you find. Finally, if you're going to be at DrupalCon New Orleans, stop by the Aten booth, I'd love to hear your ideas and feedback!/p
Categories: Drupal Feeds

Chapter Three: How to Host Drupal 8 on DigitalOcean

Fri, 04/29/2016 - 3:21pm
span data-quickedit-field-id=node/2126/title/en/rss class=field field--name-title field--type-string field--label-hiddenHow to Host Drupal 8 on DigitalOcean/span div data-quickedit-field-id=node/2126/body/en/rss class=clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__itempimg alt=How to Host Drupal 8 on DigitalOcean data-entity-type=file data-entity-uuid=81d1063c-5f91-46ba-b106-6fe76299c835 src=/sites/default/files/inline-images/do_0.jpg style=margin: 0 0 10px 10px; class=align-right /These are instructions on how to setup DigitalOcean droplet to host your personal website. a href=https://www.digitalocean.com/ target=_blankDigitalOcean/a is a very affordable cloud hosting for developers (starting from $5 for a very simple droplet 512MB Memory / 1 CPU and 20GB disk)./p/div span data-quickedit-field-id=node/2126/uid/en/rss class=field field--name-uid field--type-entity-reference field--label-hiddenspan title=View user profile. href=/about/minnur-yunusov lang= about=/about/minnur-yunusov typeof=schema:Person property=schema:name datatype=Minnur Yunusov/span/span span data-quickedit-field-id=node/2126/created/en/rss class=field field--name-created field--type-created field--label-hiddenApril 29, 2016/span
Categories: Drupal Feeds

DrupalCon News: PM FTW: Need-to-See Sessions BoFs to blow your minds

Fri, 04/29/2016 - 11:31am
div class=field field--name-body field--type-text-with-summary field--label-hiddendiv class=field__itemsdiv class=field__item evenp dir=ltrI’ll never forget the day that I talked to Angie at DrupalCon London and asked her who the community Project Managers were. There were none. I was floored. How could something so essential, useful amp; critical to success be overlooked? That was the state of our community as I saw it then: nonexistent. Who were the Project Managers in the Drupal Community? I didn’t know a single one in 2011./p/div/div/div
Categories: Drupal Feeds

agoradesign: Why it is a bad idea to do function calls on injected services during instantiation in Drupal 8

Fri, 04/29/2016 - 11:17am
div class=field field-name-body field-type-text-with-summary field-label-hidden div class=field-items div class=field-item evenToday I was tracking down a strange issue with a form submission and validation, which finally turned out to be the consequence of an unobvious wrong function call inside a class constructor./div /div /div
Categories: Drupal Feeds