Hi everyone, if you don't know me I am Rudy Grigar (basic` on Freenode IRC). I have been a volunteer Drupal.org infrastructure maintainer since 2009. This month I started full time at the Drupal Association managing the Drupal.org infrastructure, which I am extremely excited about -- volunteer work has become my day job!
One of my first projects is to improve the development process for people interested in contributing to Drupal.org.
This one is a maintainer nightmare. We refactor away and break eveything in the process. Thankfully we can't break the overlay anymore, but we have Views UI to break now! As well as various surprising components all over the place. Long story short, we need front-end testing.
All that work ended up online at the Drupal JS API site. And it is looking pretty damn good. For example, you can see everything contained in the Drupal JS object. Ever wondered what was the list of all the Drupal.behaviors in core? Or what exactly are objects created from the Drupal.ProgressBar constructor? Of course there are lots of adjustments to make but it's a start.
Hey folks, this is Erik Wagner from Volacci, and today I’m going to be walking you through installing Google Tag Manager and Universal Analytics onto your Drupal website.
So to get started, I have actually loaded up Google Tag Manager. For those of you who don’t use Google tag manager yet, just go to https://www.google.com/tagmanager/. Once you’re here you are going to need to create a new account. I’m going to walk you through the steps here and just talk brieﬂy about the concepts.
First, we need to create an account name. So, generally that’s going to be potentially your company or your brand name depending on the structure. I’m just going to name this Erik Wagner’s Website, okay. Then, you want to have a Container Name, and I’m going to call this Drupal Garden’s Website, because I actually have this installed or I'm going to install this on my Drupal Garden’s website here. I will capture my URL here and just copy and paste action, back in here paste that in, and change to HTTP. I’m going to set the time zone to Central. Quick review and everything looks good. Let’s create container. Excellent. So, now I have the code for our container. The container essentially will hold all of the tags. The container needs to be installed directly after the opening body tag on every single page of the website. So to do this, we’re gonna copy and paste this code, we're going to switch over to our Drupal Gardens website here. I am going to click on ‘Structure’ and theoretically it will load. Alright, we're going to click on ‘blocks’, we are going to create a new block, I'm going to ‘Add block’ and I am going to give this a description to call this Google Tag Manager Container. Now the code they gave us is HTML so I’m going to switch from WYSWYG into HTML here and paste that right in. I'm also going to make sure that this is selected on Full HTML, instead of Safe HTML. Although it may work with Safe HTML, I’m going to switch it up. And did that work? It did, okay.
Now I need to choose the location, now remember we want to have it right after that opening body tag. So I'm going to put it up as far as possible, the Preheader ﬁrst, pretty early on. I'm going to have this on every single page. Now press 'Save'. Alright, your block is created. Now let's go double check to make sure everything worked out ﬁne. Now I'm going to close that and go back to the home page here. Excellent, now code to be found, let's take a look at the page source here. Ah, here's our code, excellent, looks good. Cool, so our code looks good.
Back to Google Tag Manager, we need to get our Google Analytics code installed. We want to create a tag here. Alright, now that this has loaded the next step for us is actually to capture and create a new view within Google Analytics. So I'm going to switch tabs here. First step is we are actually going to create a new property, click on 'create new property.' We want to create a Universal Analytics property and call this Erik's Drupal Gardens Website. I am just going to drop my URL in here. We're going to come with an Industry category here and call this 'Computers and Electronics' and I'll go with Central time, which is where I am located. Press 'Get Tracking ID'. I am now brought to this page here, which has my tracking ID, which is what we're going to need next. I'm going to copy that tracking ID and then go over to Google Tag Manager again. I'm going to call this Universal Analytics, because we're going to install universal analytics, not this Google Analytics nonsense, though.
Paste this tracking ID in there. You'll notice we have the ability to choose a different Track Type, so it could be Page View event, Transaction, yadda yadda yadda. I'm choosing Page View. I'm not going to get into more settings or advanced settings, for the sake of time here press save. We have now created our ﬁrst tag in our container.
However, before I get too far ahead of myself, I just realized I forgot something here. Let's go back into our tag here. You'll notice that it says here on the right hand side 'this tag will not be ﬁred because it has no ﬁring rules.' Alright, let's click this ﬁring rules. Actually, there has already a default rule here. This tag will ﬁre on every single page and that's what we want to do here. So, I will just click that 'All pages' and I'll press Save. And then I will save that here. Alright now let's go and let's create a new version here. Okay, so we created version number three. I am actually going to name this something a little bit more interesting and more descriptive as well “Universal Analytics Installed and Firing Rules Setup” and press 'save'. Let me press 'Publish.' And now our container tag and new tag has been pushed to the website.
Now that that is done, let's switch over to Google Analytics here, and we should be able to see, although I probably need to load. Alright now the website has loaded, I'm just going to click to a separate page here so we can see some browsing activity. Let's go back, let's take a look. Ah, look at that, one active visitor on the website. They're on the about us page. Looks like our Google Analytics installation is up and running.
Well, that's it folks! If you have any questions or is there anything else I can do to help, please let me know. My email address is email@example.com. Thanks!A walk-through of the steps necessary to install these useful tools.google tag manager, universal analytics, Planet Drupal
You can remove content from your site using the HTTP method DELETE. Since you don't want just anyone deleting content from your site, you'll want to keep permission limited to trusted users. In this video, I'll show you how to run DELETE requests and...
Last week we held our first board meeting of the new year. We were really pleased to share a new staff report format featuring the KPIs and other metrics that we will be tracking in 2014 to document the impact of our work. Because board meetings are held in the middle of the month, our method going forward will be to report numbers against the plan for the month prior.
Last week, in lieue of a This week in Drupal Core, xjm and wechick compiled a phenomenal This YEAR in Drupal Core, so here's a catch up of the last two weeks.Happy 13th birthday, Drupal!
Drupal 1.0.0 was released on January 15th, 2001. Many software projects from that era are long forgotten by now. That we have stayed relevant and gotten stronger through 13 years of fast and chaotic evolution of the internet is, in my opinion, very impressive. Here's some highlights from the birthday:
- New York celebrated with pizza, beer, and cake (same as what I had for my 13th birthday, minus the beer).
- Dries posted his thoughts on how the internet is evolving, and therefore, what he believes to be important for Drupal. And he spent much of the day providing thoughtful answers to all sorts of interesting questions on his first-ever Reddit AMA, which can also be conveniently read in tabular form.
- For those of you like me who can't resist anthropomorphizing, Josh Koenig shared his take on Drupal growing up and will dive deeper into that and other insights in his keynote session at SANDCamp this Saturday.
- ~100 people gave Drupal core the birthday gift of their development time. Thank you!
- Ray Saltini came up with a creative gift idea: a Drupal manifesto!
- When a birthday falls so close to the new year, and therefore, a new quarter, that can create double or triple the reflecting, predicting, and planning. So check out the community predictions for 2014 and the Drupal Association's Tech Team plan for the quarter.
For module developers who've already begun porting their modules to Drupal 8, there's a shiny new alpha8 for you to play with as of yesterday. These alphas are provided to give you something more stable to work off of than having to chase HEAD every day. If you do choose to chase HEAD though, be prepared for more volatility. For example, Move definition of menu links to hook_menu_link_defaults(), decouple key name from path, and make 'parent' explicit was a very important patch committed immediately following the alpha8 release, but requires extensive follow up changes that we are trying to resolve between now and the next alpha.Where's Drupal 8 at in terms of release?
Each week, we check with core maintainers and contributors for the "extra critical" criticals that are blocking other work. These issues are often tough problems with a long history. If you're familiar with the problem space of one of these issues and have the time to dig in, help drive it forward by reviewing, improving, and testing its patch, and by making sure the issue's summary is up to date and any API changes are documented.
- Block 8.0.0 and possibly minor versions on critical security issues - this is an important policy discussion for making Drupal security maintenance sustainable.
- Finalize module-facing API of declaring menu links - this is one of the follow up issues alluded to earlier in the section about alpha8. Declaring menu links is something that nearly every contrib module does, so let's get the DX of this right.
The Drupal 8 "meta meta", compiled by vijaycs85, is a great place to start if you want to dig your teeth into a technical problem but aren't sure where to start. Or if coding isn't your thing, there are plenty of issues tagged as Needs change notification. Writing these is a great way to keep abreast of recent changes - see more on change records to get started.
As always, if you're new to contributing to core, check out Core contribution mentoring hours. Twice per week, you can log into IRC and helpful Drupal core mentors will get you set up with answers to any of your questions, plus provide some useful issues to work on.Notable Commits
The best of git log --after=2014-01-09 --pretty=oneline (and before alpha8) (65 commits in total):
- #2144919 by yched, fago, effulgentsia, amateescu, tstoeckler, chx, larowlan, swentel: Allow widgets and formatters for base fields to be configured in Field UI.
- #2020393 by dawehner, bdone, pcambra, oadaeh: Convert "Recent content" block to a View.
- #1649780 by effulgentsia, jibran, Wim Leers, nod_, hefox, joelpittet, kaare, BarisW, sun, rbayliss, Cottser, fubhy: Remove first/last/odd/even classes in favor of CSS3 pseudo selectors.
- #1862202 by plach, Berdir, katbailey, ParisLiakos, alexpott, chx, sun, larowlan, Gábor Hojtsy, cosmicdreams, vijaycs85, YesCT, penyaskito, andypost, Albert Volkman, joelpitett: Objectify the language system.
- #2173719 by dawehner, tim.plunkett: Remove the fork of doctrine/common.
- #2168333 by tim.plunkett, EclipseGc, yched, fago: Ensure custom EntityType controllers can be provided by modules.
- #1892320 by damiankloip, linclark: Add deserialize for JSON/AJAX - now you can interact with all of Drupal's REST API via plain JSON as well as via HAL.
- #2160735 by Cottser, aspilicious: Add hook_theme_suggestions_alter() - that completes item #1 from the API changes list of [meta] Theme system architecture changes.
You can also always check the Change records for Drupal core for the full list of Drupal 8 API changes from Drupal 7.Drupal 8 Around the Interwebs
Blog posts about Drupal 8 and how much it's going to rock your face.
- Setting up REST Services in Drupal 8 by Lin Clark.
- A new blog by Théodore Biadala, with articles about what it's like being a Drupal component maintainer, how to be an evil mastermind, and ES5.
- Dynamically define blocks in Drupal 8 with derivatives by berliner.
- Drupal 8 Wins: Avoiding the Dead Hook Blues, Part 2 by jam, Larry Garfield, and Kris Vanderwater.
- Diving In With Sculpin by Ashley Cyborski. This one isn't about Drupal 8 directly, but one of the goals of switching Drupal 8's templating language to Twig was to make it more accessible to designers, and in this post, a designer with no prior templating experience shares her success story about picking up Twig.
- Speaking of making Drupal friendly to non-developers, Emma Jane Westby explains how Everyone Can Try Out Drupal 8 Today.
- Jan 23 - 25: SANDCamp.
- Jan 25 - 26: Global Sprint Weekend. 37 locations so far.
- Feb 14 - 17: Drupal South.
- Mar 24 - 30: Drupal Developer Days Szeged.
Also, although DrupalCon Prague is well behind us, if you're feeling nostalgiac or if you weren't there but want to know what the vibe was like, you can watch the Drupalcon Face to Face video posted by John Desalvo.Whew! That's a wrap!
Do you follow Drupal Planet with devotion, or keep a close eye on the Drupal event calendar, or git pull origin 8.x every morning without fail before your coffee? We're looking for more contributors to help compile these posts. You could either take a few hours once every six weeks or so to put together a whole post, or help with one section more regularly. Contact xjm if you'd like to help communicate all the interesting happenings in Drupal 8!
Howdy pals. My name is Chris and I work at Commerce Guys as the R&D Engineering Manager. Did you know that three of the Commerce Guys live in Greenville, SC? Recently we were talking about the Drupal community and how we could rally a group to meet up in April during Greenville Grok.
I know what you're thinking: Not another conference! While this isn't a Drupal camp, sometimes it's good to get outside the community and be the expert at what you know and talk to experts in what they know. Grok is a small web/tech conference in Greenville, SC that I help run on the side. At Grok we talk, listen, eat and drink with world class people asking a ton of hard questions, digging into great issues, and making headway on some decent real-world solutions. This conference really is what you put into it. Bring your ideas, problems, and input and you will have a blast, learn some things, and make amazing pals. If you are hoping the answers to life will be handed to you I think you have the wrong conference.
1. So David, what's your role at Mediacurrent, both internally and client-related?
As a Drupal Developer, I develop features for new and existing sites, manage deployments, participate in code reviews with team members, and perform client trainings.
I also work with other developers to contribute to new and existing Drupal modules, and give knowledge shares on new technology or sharing things learned at a recent conference.
2. We're so glad to have you! Give us an idea of what professional path brought you here.
We're always on the lookout for great sites built with Drupal Commerce, our truly flexible software that's changing the face of eCommerce one site at a time.
Take a look at TommieCopper.com, built by Northpoint Solutions.Planet DrupalDrupal Commerce Spotlight
- Template file to display a page's output in Drupal
- This file contains a combination of php and html tags
- To render the content, we need to use the PHP variables. For list of available variables, see handbook page
Simplenews is one of the solid Newsletter management modules for Drupal. It allows a Drupal site to have multiple newsletters at once, nodes can be sent out as newsletter to multiple recipients on a single cron run. It plays well with HTML emails as well with Editors like WYSIWYG, Drupal mail system and other contrib modules like Mime Mail. Besides these, it allows to have specific sender name and email address per newsletter.
Drupal 7 uses InnoDB as default MySQL engine for all tables in database. Innodb is a better option for processing large volume of data. It gives good support for ACID property, however there are some cases where the InnoDB falls short of ones expectation. Some common examples includes count queries, memory use of Innodb,etc., see here to know more.
The latest version of DruCall is now pushed to the Drupal Git Repository. As described previously, this version uses JSCommunicator (which is based on the popular JsSIP) as the underlying phone framework. I would be very grateful if somebody from the Drupal community could kindly help my projects escape from the sandbox.Try the new Drucall, free calls to mobiles running Lumicall
I'll be giving a talk about the Lumicall project at FOSDEM 2014. The talk is at 13:00 on Sunday, 2 February in the Embedded and Mobile devroom. As space is usually limited in the devrooms and FOSDEM is a completely free event without any advance registration, please arrive early (maybe even 1 or 2 talks before mine) to get a seat.
Chapter Three: Serve your local Drupal site locally to any device and design and debug in the browser
Want to test a website on your local machine on variety of other devices before you host it? This post from Lullabot explains how you can serve up a site you’re working on locally with a service called xip.io.
In a nutshell, xip.io runs a custom DNS server on the public Internet. When your computer looks up a xip.io domain, the xip.io DNS server extracts the IP address from the domain and sends it back in the response. Anyone on your local network can visit the site on any device with a web browser.Debug and design in the browser
Debugging and refining your local site design is then a breeze on devices running the Android OS. Simply connect your Android device to your computer while in USB debugging mode and then go to Menu>Tools>Inspect devices and select your device. Next, load the Chrome browser on your device running Android and navigate to your local site.
You will then be able to debug and modify elements on the page with the inspector tool in your desktop browser and see the results update on your mobile device in real time. Here’s an indepth overview of the debugging process: Chrome developer tools - Remote debugging
The debugging process is limited to the chrome browser and is only compatible with devices running the Android OS. It’s not a complete debugging solution, but certainly a great tool to get you going in the right direction. What other tools do you like for debugging mobile sites and/or designing in the browser? Are there any similar tools for working with iOS?
oEmbed is a simple and popular protocol for embedding external media in web pages. It supports many types of content, including images, videos, and even "rich" content (i.e., HTML snippets). Unfortunately, the current Facebook embed mechanism does not work so well when the embed code is loaded dynamically on a page, e.g.
Although not advised, it's actually possible to get Drupal up and running on Heroku.
A lot of sites like to show content inside pop-ups. They are useful to allow people to browse through multiple image
In this tutorial, we're going to show you how to use the Colorbox pop-up with Drupal.
We'll see how to display both image and video fields inside a pop-up window.
With Drupal 8, you can provide REST services to interact with your site’s data, and you don’t have to rely on contrib modules to do it. This screencast is the first in a series demonstrating how to configure such services. In this one, I will show...
If you're a Drupal or PHP developer used to debugging or troubleshooting some code by adding a print $variable; or dpm($object); to your PHP, and then refreshing the page to see the debug message (or using XDebug, or using watchdog logging...), debugging Varnish's VCL language can be intimidating.
VCL uses C-like syntax, and is compiled when varnish starts, so you can't just modify a .vcl file and refresh to see changes or debug something. And there are only a few places where you can simply stick a debug statement. So, I'll explain four different ways I use to debug VCLs in this post (note: don't do this on a production server!):
One of the primary goals of the new CPR.org website was creating a great, seamless media experience. Part of this was the creation of a persistent audio player that worked on as many modern browsers and devices as possible. Creating this experience, though, was a bit of a process. The audio landscape is pretty scattered when you take a close look at HTML5 audio support and Flash support. So the first thing up was finding a library that let us use both types of audio to reach a wider audience.jPlayer for HTML5 Audio
HTML5 Audio is an important step forward in bringing media to the masses. It allows browsers to natively play audio without the help of plugins, whereas Adobe Flash was the primary means for playing audio in the past. This is doubly necessary for the plethora of new devices that don’t use Adobe Flash. But HTML5 Audio isn’t exactly a silver bullet just yet. While all modern browsers support Audio, each browser supports different formats (especially when considering compressed formats like MP3 or AAC).
The player on the site is using a library called jPlayer, which provides HTML5 Audio and a Flash fallback. The change between players is transparent to site visitors and works well across the devices we tested. The site can play the audio files for stories and the audio streams that let you listen to live CPR programming anywhere you have an internet connection.AJAX Navigation
The next issue is that if you throw an audio player on a page, and the users get excited about a link they see on the site the browser will leave the page and the audio will stop. We wanted to accomplish something more seamless, which leaves a couple options:
- Have an audio player that pops up in a new window
- Use AJAX for navigation, keeping the audio player on the page between requests
The new window approach is tried-and-true, but does present a user experience we wanted to avoid: having a separate window is confusing, especially on mobile devices. On a mobile device that would essentially become a new tab/screen and prevent the site exploration that we wanted. Desktop users would still have to deal with a separate window that may or may not be visible.
We opted to make the site use AJAX navigation and leverage HTML’s new History API. This gives us the seamless navigation that the site uses and keeps the address of site resources clean, which is not only important from an OCD standpoint but also for search engine’s and users a-like. To pull this off, we turned to the AJAX Links API (“Ajaxify Drupal with JQuery Ajax”) module. The module will take a normal Drupal site and allow you to target a set of links to work via an AJAX load instead of via normal navigation.
For the most part, the module seemed to work as needed out of the box. There were a few small changes we made and submitted back to the project as we came across issues. Many of these were feature additions, but we also ended up fixing some bugs along the way. In the end, we had diverted from the installed version quite a bit to make the functionality work with an updated jQuery, fixing bugs, and a few specifics from the site. Some of our changes included:
- Updated to work with jQuery 1.8
- Added “negative selector” support
- Fixed some issues with browser history navigation (forward & back buttons)
- Fixed targeting of links to downloadable files, mailto: links, and external links
- Added custom callbacks for successful link navigation
- Fixing a couple smaller issues with the module: 2135145, 2135135
Some issues were outside of the AJAX module’s control though. Other modules like reCaptcha and Webform had to be updated to submit and update via AJAX. We even wrote code to allow Polls to work via AJAX.
In the end, we hope the site encourages listeners to enjoy the programs and stories they have come to love, but also explore CPR’s stories in word and graphic form. So, sit back with your favorite device, enjoy some audio streams, and catch up on some stories you may have missed on CPR.org.