Planet Drupal

Syndicate content
Drupal.org - aggregated feeds in category Planet Drupal
Updated: 44 min 5 sec ago

Web Omelette: Drupal 8: custom data on configuration entities using the ThirdPartySettingsInterface

Mon, 06/15/2015 - 09:00
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpIn this article we are going to look at how to use the a href=https://api.drupal.org/api/drupal/core!lib!Drupal!Core!Config!Entity!ThirdPartySettingsInterface.php/interface/ThirdPartySettingsInterface/8ThirdPartySettingsInterface/a to add some extra data to existing configuration entities. For example, if you ever need to store some config together with a node type or a taxonomy vocabulary, there is a great way to do so using this interface. Today we are going to see an example of this and add an extra field to the menu definition and store the value in this way./p pThere are a number of steps involved in this process. First, we need to alter the form with which the entity configuration data is added and saved. In the case of the menu entity there are two forms (one for adding and one for editing) so we need to alter them both. We can do something like this:/p precode/** * Implements hook_form_alter(). */ function my_module_form_alter(amp;$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) { if ($form_id === 'menu_add_form' || $form_id === 'menu_edit_form') { my_module_alter_menu_forms($form, $form_state, $form_id); } } /code/pre pInside this general codehook_form_alter()/code implementation we delegate the logic to a custom function if the form is one of the two we need. Alternatively you can also implement codehook_form_FORM_ID_alter()/code for both those forms and delegate from each. That would limit a bit on the function calls. But let's see our custom function:/p precode/** * Handles the form alter for the menu_add_form and menu_edit_form forms. */ function my_module_alter_menu_forms(amp;$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) { $menu = $form_state-gt;getFormObject()-gt;getEntity(); $form['my_text_field'] = array( '#type' =gt; 'textfield', '#title' =gt; t('My text field'), '#description' =gt; t('This is some extra data'), '#default_value' =gt; $menu-gt;getThirdPartySetting('my_module', 'my_text_field'), '#weight' =gt; 1 ); if (isset($form['links'])) { $form['links']['#weight'] = 2; } $form['#entity_builders'][] = 'my_module_form_menu_add_form_builder'; } /code/pre pIn here we do a couple of things. First, we retrieve the configuration entity object which the form is currently editing. Then, we define a new textfield and add it to the form. Next, we check if the form has menu links on it (meaning that it's probably the edit form) in which case we make its weight higher than one of our new field (just so that the form looks nicer). And last, we add a new code#entity_builder/code to the form which will be triggered when the form is submitted./p pThe codegetThirdPartySetting()/code method on the entity object is provided by the codeThirdPartySettingsInterface/code which all configuration entities have by default if they extend from the codeConfigEntityBase/code class. With this method we simply retrieve a value that is stored as emthird party/em for a given module (codemy_module/code in this case). It will return NULL if none is set so we don't even need to provide a default in this case./p pLet us now turn to our code#entity_builder/code which gets called when the form is submitted and a href=https://www.drupal.org/node/2420295is responsible for mapping data to the entity/a:/p precode/** * Entity builder for the menu configuration entity. */ function my_module_form_menu_add_form_builder($entity_type, \Drupal\system\Entity\Menu $menu, amp;$form, \Drupal\Core\Form\FormStateInterface $form_state) { if ($form_state-gt;getValue('my_text_field')) { $menu-gt;setThirdPartySetting('my_module', 'my_text_field', $form_state-gt;getValue('my_text_field')); return; } $type-gt;unsetThirdPartySetting('my_module', 'my_text_field'); } /code/pre pdiv id=block-inject-2 class=block-inject block-inject-2/divdiv class=clearfix/divpInside we check if our textfield was filled in and set it to the emthird party setting/em we can access from the config entity object that is passed as an argument. If the form value is empty we reset the emthird party setting/em to remove lingering data in case there is something there./p pAnd that's pretty much it for the business logic. We can clear the cache and try this out by creating/editing a menu and storing new data with it. However, our job is not quite finished. We need to add our a href=https://www.drupal.org/node/1905070#useconfiguration schema/a so that it becomes translatable. Inside the code/config/schema/my_module.schema.yml/code file of our module we need to add this:/p precodesystem.menu.*.third_party.my_module: type: mapping label: 'My module textfield' mapping: my_text_field: type: text label: 'My textfield' /code/pre pWith this schema definition we are basically appending to the schema of the codesystem.menu/code config entity by specifying some metadata about the emthird party settings/em our module provides. For more information on a href=https://www.drupal.org/node/1905070config schemas/a be sure to check out the docs on Drupal.org./p pNow if we reinstall our module and turn on configuration translation, we can translate the values users add to codemy_text_field/code. You go to codeadmin/config/regional/config-translation/menu/code, select a menu and when translating in a different language you see a new codeThird Party Settings/code fieldset containing all the translatable values defined in the schema./p pHope this helps./p /div/div/divdiv class=field field-name-field-categories field-type-taxonomy-term-reference field-label-hiddenIn span class=field-itemsspan class=field-item evena href=/drupal-8Drupal 8/a/span/span/divdiv class=sharethis-buttonsdiv class=sharethis-wrapperspan st_url=http://www.webomelette.com/drupal-8-custom-data-configuration-entities-using-thirdpartysettingsinterface st_title=Drupal 8: custom data on configuration entities using the ThirdPartySettingsInterface class=st_facebook/span span st_url=http://www.webomelette.com/drupal-8-custom-data-configuration-entities-using-thirdpartysettingsinterface st_title=Drupal 8: custom data on configuration entities using the ThirdPartySettingsInterface class=st_twitter st_via=drupalexp/span span st_url=http://www.webomelette.com/drupal-8-custom-data-configuration-entities-using-thirdpartysettingsinterface st_title=Drupal 8: custom data on configuration entities using the ThirdPartySettingsInterface class=st_googleplus/span script type='text/javascript'var switchTo5x = true;/scriptscript type='text/javascript' src='http://w.sharethis.com/button/buttons.js'/scriptscript type='text/javascript'stLight.options({publisher:dr-8de6c3c4-3462-9715-caaf-ce2c161a50c});/script/div/div

Chen Hui Jing: Developing Drupal sites as a team

Mon, 06/15/2015 - 02:00
pA lot of people, myself included, start out with Drupal on their own, developing and building everything as a one-person operation. When we’re working by ourselves, there will be certain good practices that we neglect, either out of convenience (there’s no point doing X since I’m the only one touching this project), or out of ignorance (wow, I had no idea that was how Y was supposed to be used). /p pWorking with a team of people to build a Drupal site (or any other development project) requires more structure and discipline to ensure the project doesn’t descend into a pile of spaghetti code. I’m going to try to summarise the processes that worked for my team thus far. I...

Code Karate: How to A/B test your Drupal Site

Sun, 06/14/2015 - 15:48
div class=field field-name-field-episode-number field-type-number-integer field-label-abovediv class=field-labelEpisode Number:nbsp;/divdiv class=field-itemsdiv class=field-item even208/div/div/divdiv class=field field-name-field-ddod-video field-type-file field-label-hiddendiv class=field-itemsdiv class=field-item evenimg src=http://codekarate.com/sites/default/files/styles/large/public/media-youtube/pStxcwOV1aw.jpg?itok=KC8IJhVc alt=How to A/B test your Drupal Site //div/div/divdiv class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpAre you testing your site? Until recently, we weren’t and it was costing us. Every element on your website should have a meaning and if you aren’t testing it against something else how can you be sure that you are maximizing your results! /p/div/div/divdiv class=field field-name-taxonomy-vocabulary-1 field-type-taxonomy-term-reference field-label-abovediv class=field-labelTags:nbsp;/divdiv class=field-itemsdiv class=field-item evena href=/category/tags/drupalDrupal/a/divdiv class=field-item odda href=/category/tags/drupal/drupal-7Drupal 7/a/divdiv class=field-item evena href=/category/tags/drupal/site-buildingSite Building/a/divdiv class=field-item odda href=/category/tags/drupal-planetDrupal Planet/a/divdiv class=field-item evena href=/category/tags/tips-and-tricksTips and Tricks/a/divdiv class=field-item odda href=/category/tags/uidesignUI/Design/a/divdiv class=field-item evena href=/category/tags/uidesign/javascriptJavascript/a/div/div/div

DrupalOnWindows: Database Transactions in Drupal

Sun, 06/14/2015 - 07:00
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:encodedpThis article is not what about a href=http://en.wikipedia.org/wiki/Database_transactiontransactions/a are, but strongthe particularities of its implementation in Drupal./strong/p pDrupal database abstraction layer has the ability to handle transactions and nested transactions./p pIt uses the PDO transaction capabilities to start/commit/rollback the higher level transaction in the scope, and database specific functions such as SAVENPOINT to handle the nested transactions./p pTransactions in Drupal are quite a mess to use:/p/div/div/divdiv class=view view-read-more view-id-read_more view-display-id-entity_view_1 view-dom-id-759b7438b3e26caae6b8b5c656c8a727 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/drupal-iis-or-apacheDrupal on IIS or Apache/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/blog/adding-native-json-storage-support-drupal-7-or-how-mix-rdbms-nosqlAdding native JSON storage support in Drupal 7 or how to mix RDBM with NoSQL/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/when-php-crashes-how-collect-meaningful-information-and-what-do-itWhen PHP crashes: how to collect meaningful information and what to do with it/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/setting-code-syntax-higlighting-drupalSetting up Code Syntax Higlighting with Drupal/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/distinct-options-views-exposed-filter-views-selective-filters-moduleDistinct options in a views exposed filter: The Views Selective Filters Module/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/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-7 views-row-odd div class=views-field views-field-title span class=field-contenta href=/en/blog/node-comment-and-forum-working-together-boost-user-participationNode Comment and Forum working together to boost user participation/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/php-7-nightlies-windowsPHP 7 nightlies for Windows/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/only-update-changed-fields-or-properties-entity-drupalOnly update changed fields or properties for an entity in Drupal/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/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 /ul/div /div /div

Drupal core announcements: Drupal core security release window on Wednesday, June 17

Sat, 06/13/2015 - 00:30
div class=field field-type-datestamp field-field-start7 div class=field-items div class=field-item odd div class=field-label-inline-first Start:nbsp;/div span class=date-display-single2015-06-17 (All day) America/New_York/span /div /div /div div class=field field-type-text field-field-event-type div class=field-items div class=field-item odd Online meeting (eg. IRC meeting) /div /div /div div class=field field-type-userreference field-field-organizers div class=field-labelOrganizers:nbsp;/div div class=field-items div class=field-item odd a href=/user/14705 title=View user profile.David_Rothstein/a /div /div /div pThe monthly security release window for Drupal 6 and Drupal 7 core will take place on Wednesday, June 17./p pThis does not mean that a Drupal core security release will necessarily take place on that date for either the Drupal 6 or Drupal 7 branches, only that you should prepare to look out for one (and be ready to update your Drupal sites in the event that the Drupal security team decides to make a release)./p pThere will be no bug fix/feature release on this date; the next window for a Drupal core bug fix/feature release is Wednesday, July 1./p pFor more information on Drupal core release windows, see the documentation on a href=http://drupal.org/documentation/version-info#whenrelease timing/a and a href=http://drupal.org/node/1173280security releases/a, and the a href=http://groups.drupal.org/node/260803discussion/a that led to this policy being implemented./p

Open Source Training: Easily Apply Drupal Patches with Patch Manager

Fri, 06/12/2015 - 21:56
div class=ost-intro-imageimg src=https://www.ostraining.com/images/drupal/ost-blog-drupal-patch.jpeg alt=ost blog drupal patch width=200 height=200 style=float: right; //div pHave you ever updated your Drupal site only to suddenly have errors?/p pIf you use Drupal regularly, this will happen to you at some point. However, one of the good things about using Drupal is there are so many other users that someone else may well have found and solved the error./p pOne common way to solve an error is with a patch. A patch changes the code on your site, but only by editing a file rather than providing a complete update./p pMany of the available instructions for applying patches ask you to use an application called Git and to use command line instructions. These instructions can be intimidating, so we're going to show you how non-coders can safely and effectively apply patches./pimg src=http://feeds.feedburner.com/~r/ostrainingdrupal/~4/ZbkXbukf_Ko height=1 width=1 alt=/

LightSky: LightSky is Seeking a Senior Ruby on Rails Developer / Drupal Developer

Fri, 06/12/2015 - 21:20
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item even property=content:encodedpLightSky is seeking a Senior Ruby on Rails Developer./p p strongAbout the job/strong/p/div/div/divdiv class=sharethis-buttonsdiv class=sharethis-wrapperspan st_url=http://www.lightsky.com/blog/lightsky-seeking-senior-ruby-rails-developer-drupal-developer st_title=LightSky is Seeking a Senior Ruby on Rails Developer / Drupal Developer class=st_facebook_large displayText=facebook/span span st_url=http://www.lightsky.com/blog/lightsky-seeking-senior-ruby-rails-developer-drupal-developer st_title=LightSky is Seeking a Senior Ruby on Rails Developer / Drupal Developer class=st_twitter_large displayText=twitter/span span st_url=http://www.lightsky.com/blog/lightsky-seeking-senior-ruby-rails-developer-drupal-developer st_title=LightSky is Seeking a Senior Ruby on Rails Developer / Drupal Developer class=st_linkedin_large displayText=linkedin/span span st_url=http://www.lightsky.com/blog/lightsky-seeking-senior-ruby-rails-developer-drupal-developer st_title=LightSky is Seeking a Senior Ruby on Rails Developer / Drupal Developer class=st_email_large displayText=email/span span st_url=http://www.lightsky.com/blog/lightsky-seeking-senior-ruby-rails-developer-drupal-developer st_title=LightSky is Seeking a Senior Ruby on Rails Developer / Drupal Developer class=st_sharethis_large displayText=sharethis/span span st_url=http://www.lightsky.com/blog/lightsky-seeking-senior-ruby-rails-developer-drupal-developer st_title=LightSky is Seeking a Senior Ruby on Rails Developer / Drupal Developer class=st_pinterest_large displayText=pinterest/span span st_url=http://www.lightsky.com/blog/lightsky-seeking-senior-ruby-rails-developer-drupal-developer st_title=LightSky is Seeking a Senior Ruby on Rails Developer / Drupal Developer class=st_plusone_large displayText=plusone/span /div/div span property=dc:title content=LightSky is Seeking a Senior Ruby on Rails Developer / Drupal Developer class=rdf-meta element-hidden/span

Drupal Watchdog: Yubikey NEO and a Better Password Manager: pass

Fri, 06/12/2015 - 18:52
div class=field field--body field-type-text-with-summary field-label-hidden field--rss h2Supergenpass and its Problems/h2 pFor a very long time I have been using supergenpass as my primary password “manager”. It started as a simple bookmarklet and evolved into browser extensions and mobile apps. Taking a primary password and the domain name, it creates a password unique to the domain. There are a number of problems with this: if the master password gets compromised, all your passwords are compromised even the ones you will only create in the future. The created password is not flexible: some systems have nonsensical and ill-advised limitations on what the password must contain. It’s not easy to change your password every few months if you want to since it’d involve changing the master password. Also, since it’s domain dependent, logging into amazon.ca with your amazon.com password or ba.com with your britishairways.com password is slightly problematic/annoying. One Shall Pass iterates on this idea and adds a “generation” parameter so you can easily change your password but then you need to remember what generation were you using for a site.../p pAnd it’s only a password, it’s not a storage, so it can’t help with PIN codes or security questions and answers which is necessary because you should never use real answers to those questions as they are too easy to social engineer. When asked about your childhood address, use something like “That red van down by the river” or something similar but if you want to put in a different one for every site, you need to store your answers./p h2Other Solutions/h2 pMany use solutions like Lastpass, but I find them entirely unacceptable as they are black boxes and you have no control over your own data. In my world view anything interacting with my passwords must be open source. Also, it creates a huge “single point of failure” in your digital life -- if your cloud-based password manager goes down you can’t log into anything. Something like KeePassX or Kwallet is slightly better but there you have another problem: the master password. It obviously needs to be strong, but that means it’s cumbersome to type in all the time so you will have some long timeout between password prompts and then compromising your machine means compromising all your passwords in one go./p h2Pass and the NEO/h2 pI’ve found a program called a href=http://www.passwordstore.org/pass/a “the standard unix password manager”. In fact, it’s just a friendly wrapper around GPG encoded files (GPG really needs more friendly UIs). One file per domain is the recommended way to organize your files. Pass can copy the first line of the file to the clipboard so it is recommended to put the password there and use the rest of the file for other data. By itself it’s not much stronger than KeePassX or similar: you have the gpg-agent keeping your private key open (much like ssh-agent). But then there is the a href=https://www.yubico.com/products/yubikey-hardware/yubikey-neo/Yubikey NEO/a (and the NEO-n) which can store a GPG key. Now you only present your private key when it’s needed for decryption. Also, since the private key can not be exported from the NEO, a simple (easy to remember and enter) PIN is adequate as it is impossible to brute force the PIN as the device will lock after a few tries./p h2The Worst Case/h2 pEven in the worst case where an attacker can execute arbitrary commands on your computer the pass-NEO combo is not defeated immediately: again, the NEO does not support exporting the key so each password file would need to be sent to the NEO for decryption. However, it is only present very briefly -- just when you log in. So it will take time for the attacker to walk away with every password you have and in such a catastrophic event every small hindrance might matter. (The really worst case is a machine compromised in this fashion and then the attacker physically stealing your YubiKey later. Our only advice for this case: try not to cross any three letter agencies.)/p h2The Various Modes of the NEO/h2 h3One Time Password (OTP)/h3 pThe NEO can operate in a number of modes: it can provide a one time password (OTP) which is not particularly useful because the server would need to implement the YubiKey API for this to be useful and few websites do. /p h3Universal Two Factor (U2F)/h3 pThe U2F mode implements an up-and-coming standard which -- as these standards usually do -- won’t be ubiquitous any time soon. Where it is implemented, it prevents both phishing and spear-phishing attacks./p h3Chip Card Interface Device (CCID)/h3 pFinally, it can emulate a smartcard reader and the smartcard both, this is called the CCID mode. It is capable of emulating the removal of the smartcard as well which is very useful for the “worst case” described above. YubiKey calls this the “eject” mode: one touch of the device “inserts” the smartcard, another “ejects” it. It is even capable of triggering an “eject” automatically a few seconds after the “insert”. How long it should wait for the automated eject is configurable./p h2Setting up Eject Mode/h2 h3GUI to Read the Warnings/h3 pThere are no less than three utilities provided for mode switching. The GUI, called span class=geshifiltercode class=php geshifilter-phpneoman/code/span is useless for us: it is not capable of switching on eject mode at all. Experimenting with it, however, shows a very useful warning: after switching modes you need to remove the device and plug it back. No other utility shows this warning. For this reason, if you are setting up a NEO-n I recommend using a simple USB extension cord to make it (much) easier to unplug and replug./p h3ykpersonalize to Set/h3 pThe span class=geshifiltercode class=php geshifilter-phpykpersonalize/code/span utility can set eject mode and also can set the automated timeout. To do this, run span class=geshifiltercode class=php geshifilter-phpykpersonalize -m81:12:1/code/span where 81 is the mode for eject, the middle number belongs to a mode we do not use (can not use alongside eject, in fact) and the last 1 means one second automated timeout. Once you’ve run this command, do not forget to unplug and replug. After that, span class=geshifiltercode class=php geshifilter-phpykpersonalize/code/span no longer recognizes the NEO. If you run span class=geshifiltercode class=php geshifilter-phppscc_scan/code/span you will get/p pre Reader 0: Yubico Yubikey NEO CCID 00 00 Card state: Card removed, Exclusive Mode /prep And touching the device will switch on the LED and make span class=geshifiltercode class=php geshifilter-phppcsc_scan/code/span show the card “inserted” (press Ctrl+C to exit span class=geshifiltercode class=php geshifilter-phppcsc_scan/code/span). After one second the LED switches off and span class=geshifiltercode class=php geshifilter-phppcsc_scan/code/span now reports the card removed. If you do not get these results from span class=geshifiltercode class=php geshifilter-phppcsc_scan/code/span, make sure you have span class=geshifiltercode class=php geshifilter-phppcscd/code/span running./p h3ykneomngr to Reset/h3 pIf you want to change the eject timeout then you need to run the emthird/em utility provided with the NEO, span class=geshifiltercode class=php geshifilter-phpykneomgr/code/span. Even this won’t be able to read the status of your device, but it will be able to reset to a mode where span class=geshifiltercode class=php geshifilter-phpykpersonalize/code/span can work again. Since this requires the device to be “present” and we set up a very short timeout, it’s recommended to run this in an infinite loop: span class=geshifiltercode class=php geshifilter-phpuntil ykneomgr -M0 2amp;gt; /dev/null ; do sleep 0.1 ; done/code/span then touch the NEO. Once reset to mode 0, don’t forget to unplug and replug, and then you can set a different timeout if you want or completely without an automated timeout even with span class=geshifiltercode class=php geshifilter-phpykpersonalize -m81/code/span./p pNow that’s sorted, we can turn to creating GPG keys, subkeys and installing them into the NEO/NEO-n. This process I won’t cover because it’s extensively covered elsewhere. /p h2Using it All/h2 pAfter all this setup, the usage is fairly simple:/p h3On Mobile/h3 pThis combo works with Android as well: the NEO is NFC compatible and there is an a href=https://play.google.com/store/apps/details?id=com.zeapo.pwdstoreAndroid version/a of pass which uses a href=https://play.google.com/store/apps/details?id=org.sufficientlysecure.keychainOpenKeyChain/a (the rough equivalent of gpg-agent for Android) to communicate with the NEO./p h3On Desktop/h3 pI’ve written a little a href=https://github.com/chx/ykgodotscript/a to make my life easier: first it waits for an URL to appear on the clipboard, then it’ll wait for a Yubikey and call span class=geshifiltercode class=php geshifilter-phppass/code/span with the domain extracted from the URL. Since there is an a href=https://chrome.google.com/webstore/detail/copy-url/mkhnbhdofgaendegcgbmndipmijhbili?hl=enextension/a for copying URLs from Chrome and I have a NEO-n the login process becomes this: click the URL copy button in the addressbar (or press Ctrl-L Ctrl-C or F6 Ctrl-C), touch the NEO-n, wait for the notification and paste the password. Without this script, the one second auto timeout recommended in the setup section is not viable. Although certainly not as simple as the Supergenpass extension, it’s still pretty easy and incomparably more secure./p /div

Sooper Drupal Themes: What's your opinion on premium Drupal modules

Fri, 06/12/2015 - 18:45
div class=field-body pWe had this discussion 4 years ago. Why bring it up again now? Because several big codecanyon projects are coming to Drupal soon and I think it will have an impact. One of them is Slider Revolution. Slider Revolution is an All-purpose Slide Displaying Solution that allows for showing almost any kind of content with highly customizable transitions, effects and custom animations. With nearly 60.000 sales at 18 USD it's the second most popular Wordpress plugin on codecanyon. The number of sites using this module is much greater because emhundreds /emof premium Wordpress themes ship with the slider built into the theme. Some of these themes like Avada (140.000 sales) are widespread and amplify the impact of paid plugins in Wordpress./p pTo refresh our memories here are some quotes from 2011:/p blockquote pthe DrupalAppStore that killed drupal/p footerciteMortenDK, a href=http://morten.dk/blog/drupalappstore-killed-drupalhttp://morten.dk/blog/drupalappstore-killed-drupal/a/cite/footer/blockquote hr /blockquote p..one thing that open source doesn't do a good job with: building teams of people with complementary skills to make sure that the software is a good experience for the customer. Why? Because there is no customer. Oh sure, hundreds of thousands of people use my software and they consider themselves customers, but ultimately they are not. Why? The definition of a customer involves, among other things, providing a revenue stream./p footerciteEarl Miles (merlinofchaos), a href=http://www.angrydonuts.com/contributing-to-open-sourcehttp://www.angrydonuts.com/contributing-to-open-source/a/cite/footer/blockquote hr /blockquote pThe pay-per-copy business model just doesn't work very well, practically, unless you have the completely artificial system of copyright restrictions to prop it up. (Physical objects have a natural scarcity that makes pay-per-copy vastly more practical.) When you're dealing with copyleft software, it works even more poorly./p footerciteLarry Garfield, a href=http://www.angrydonuts.com/contributing-to-open-sourcehttp://www.angrydonuts.com/contributing-to-open-source/a/cite/footer/blockquote hr /blockquote pSometimes I keep wondering why on almost every drupaller comment I read on the net is against making money on selling modules but it is OK to sell themes?/p pIf themer can get away / circumvent GPL by licensing their css/images/js in different license than GPL why can't module developer create a separate php class api that doesn't touch any of drupal api and license it with commercial license?/p footerciteJason Xie, a href=http://drupal-translation.com/content/it-evil-request-paymenthttp://drupal-translation.com/content/it-evil-request-payment/a/cite/footer/blockquote pWith respect to the question How this last commenter was on to something. Large projects on CodeCanyon protect themselves against redistribution by having a functional code library that can work independently from the CMS integration. If there is any open source lawyer reading this I would love to hear comments on GPL compatibility of this structure./p h2My opinion/h2 pAs a a href=http://www.sooperthemes.com(premium) Drupal themes/a developer I have a special interest in development of these plugins: they provide great value to clients of my premium theme. For only around 100 USD I can buy an extended license for a module that cost the developer hundreds of man-hours to develop. By including several plugins into my theme that cost 20 USD per plugin, my theme which costs 48 USD is instantly more valuable to end-users. In general I have a positive attitude to CodeCanyon developers joining the Drupal modules. However, there will be some modules that are good for Drupal and others that could be bad for the Drupal ecosystem. /p pFor example, me and several other Drupal developers have been working on improving Bootstrap+Views integration through the views_bootstrap module: a href=https://www.drupal.org/node/2203111https://www.drupal.org/node/2203111/a. In the meantime, some guy on CodeCanyon seems to have all our problems figured out already and he is selling a very sleek Views+Bootstrap module on CodeCanyon. The code he sells is all Drupal-integrated programming. As far as I understand GPL this means that all his code is also GPL. So what can we do, is it legal to copy his code into the views_bootstrap module? Is it compliant with the rules and code of conduct on Drupal.org? Is it morally OK?/p p!--break--/p p /p /div h3 class=field-label Tags /h3 div class=field-tags a href=/category/tags/planet typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=planet/a /div div class=field-tags a href=/tags/drupal-app-store typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=drupal app store/a /div div class=field-tags a href=/tags/premium-modules typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=premium modules/a /div div class=field-tags a href=/category/tags/premium-themes typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=premium themes/a /div h3 class=field-label Drupal /h3 div class=field-drupal a href=/category/core-compatibility/7x typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=7.x/a /div

OpenLucius: 13 new kick-ass features | Drupal distro OpenLucius updated

Fri, 06/12/2015 - 13:26
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpstrongIt has been quiet for a few weeks around our Drupal distro a href=http://drupal.org/project/openluciusOpenLucius/a, but this has its reason. /strongWe have worked hard on the first 'Release Candidate'. And we could not resist to implement new features. These new features have been developed with the feedback of the now thousands of OpenLucius users./ppSo strongteam and project management /stronghas been made even easier! :-D/ppThe 13 new features and improvements:/p/div/div/div

Open Source Training: How to Add a Slider Search to Drupal

Fri, 06/12/2015 - 02:18
pOne of our customers was setting up a Drupal Commerce site and wanted to add a slider search./p pHere's an example of a slider search in action:/p div id=step_1 class=lessonStep top div class=StepImageimg src=https://www.ostraining.com/images/drupal/slider-search/media_1434051431390.png alt= width=226 height=113 //div div class=instructions pThere are a lot of steps involved in this process, but it's worth the effort. This tutorial will use the default search, without relying on Apache Solr or alternatives./pimg src=http://feeds.feedburner.com/~r/ostrainingdrupal/~4/Pnoq12UkJYs height=1 width=1 alt=/

DrupalCon News: Book Your Hotel Room Today!

Fri, 06/12/2015 - 02:10
div class=field field--name-body field--type-text-with-summary field--label-hiddendiv class=field__itemsdiv class=field__item evenpHave you reserved your room at the a href=http://en.hotelbarcelonaprincess.com/drupalcon-barcelona.htmBarcelona Princess/a yet? It’s the preferred hotel for all DrupalCon Barcelona attendees, and we’ve negotiated some great rates for our Drupal friends./p/div/div/div

Red Crackle: 15 minutes to your first Drupal integration test

Thu, 06/11/2015 - 22:52
This post will help you write and run your first Drupal integration test in less than 15 minutes. By end of this post, you will be able to write an automated test to make sure that superuser is able to create two pieces of content, one published and the other unpublished. We'll test that anonymous user is able to view the published content and is not able to view the unpublished content. You can follow along these steps on any Unix or Mac machine and have automated tests running in a matter of minutes.

Drupal core announcements: DrupalCI: It's coming!

Thu, 06/11/2015 - 20:25
pa href=https://www.drupal.org/project/drupalciDrupalCI/a is the next-generation version of our beloved testbot. The MVP (a href=http://en.wikipedia.org/wiki/Minimum_viable_productminimum viable product/a) is coming soon (rolled out in parallel with the old testbot for awhile)./p pHere's a sneak peak at what it'll look like and some of its new capabilities: a href=https://groups.drupal.org/node/471473 title=https://groups.drupal.org/node/471473https://groups.drupal.org/node/471473/a/p

Drupal core announcements: D8 Accelerate critical issue sprint in London, UK, July 2-8

Thu, 06/11/2015 - 19:08
div class=field field-type-datestamp field-field-start7 div class=field-items div class=field-item odd div class=field-label-inline-first Start:nbsp;/div span class=date-display-start2015-07-02 09:00/spanspan class=date-display-separator - /spanspan class=date-display-end2015-07-08 18:00 UTC/span /div /div /div div class=field field-type-text field-field-event-type div class=field-items div class=field-item odd Sprint /div /div /div div class=field field-type-userreference field-field-organizers div class=field-labelOrganizers:nbsp;/div div class=field-items div class=field-item odd a href=/user/24722 title=View user profile.xjm/a /div /div /div h3Sprint toward a Drupal 8 release candidate/h3 pAs of this writing, a href=https://www.drupal.org/project/issues/search/drupal?project_issue_followers=amp;status%5B%5D=1amp;status%5B%5D=13amp;status%5B%5D=8amp;status%5B%5D=14amp;status%5B%5D=4amp;priorities%5B%5D=400amp;version%5B%5D=8.0.x-devamp;issue_tags_op=%3D22 known critical issues/a block a Drupal 8 release candidate. It's time to close that gap./p pThe a href=https://assoc.drupal.org/d8accelerateD8 Accelerate/a program is sponsoring a strongcritical issue sprint in London, UK, from Thursday, July 2 to Wednesday, July 8/strong. The sprint will be hosted by UK company and Drupal Association member a href=http://brightlemon.com/BrightLemon/a at a href=https://www.google.com/maps/place/Zeus+House,+Provost+St,+London+N1+7NG,+UK/@51.5281677,-0.0885093,17z/data=!3m1!4b1!4m2!3m1!1s0x48761ca6874f8227:0x37790eca3fb5e694!6m1!1e1Unit 12, Zeus House 16-30 Provost Street London, N1 7NG United Kingdom/a./p h3Space is limited but we welcome your help!/h3 pThis sprint will be focused exclusively on resolving critical issues in Drupal 8. Confirmed attendees so far include alexpott, amateescu, Berdir, dawehner, pfrenssen, plach, xjm, Wim Leers, and znerol. If you can help resolve the remaining critical issues, we'd love to collaborate with you as well! Space is limited, so a href=https://www.drupal.org/user/65776/contactcontact xjm/a if you are interested in signing up for the sprint./p pRemote collaboration is also welcome; join us in a href=https://www.drupal.org/irc#drupal-contribute/a during the sprint. If you can't make this sprint, you can help on a href=https://www.drupal.org/project/issues/search/drupal?project_issue_followers=amp;status%5B%5D=1amp;status%5B%5D=13amp;status%5B%5D=8amp;status%5B%5D=14amp;status%5B%5D=4amp;priorities%5B%5D=400amp;version%5B%5D=8.0.x-devamp;issue_tags_op=%3DDrupal 8 criticals/a in the issue queue now or at one of the other a href=https://www.drupal.org/drupal-8.0/get-involved#sprintsupcoming Drupal 8 sprints/a, or help by a href=https://www.drupal.org/node/2474049triaging major issues/a./p pLet's get Drupal 8 done!/p

Drupal Association News: Wunderkraut Breaks Ground as Drupal's First Signature Partner

Thu, 06/11/2015 - 18:32
div class=field field-name-body field-type-text-with-summary field-label-hiddendiv class=field-itemsdiv class=field-item evenpimg alt=Wunderkraut logo class=left src=https://assoc.drupal.org/files/wunderkraut-logo-240.png style=width: 240px; height: 56px; /The Drupal Association is excited to announce that a href=http://www.wunderkraut.com/ target=_blankWunderkraut/a, a full service European agency and longtime supporter of the Drupal project, is now our first Signature Supporting Partner. A Supporting Partner since March 2014, Wunderkraut's latest contribution deepens its commitment to advancing the Drupal project and empowering the Drupal community./p pDrupal’s community is amazing. We’re very proud to be a part of it, said Wunderkraut CEO Vesa Palmu. We're an established provider of Drupal services, and enjoy contributing to the Drupal ecosystem however we can, whether through camps or sponsored events, and especially when we can be quirky and fun! This passion is why we're now a Signature Partner—to strengthen our commitment to growing this community and project we love./p pThe a href=https://assoc.drupal.org/supporting-partnersSupporting Partner Program/a includes more than 60 companies from around the world. All of the funding from the program goes directly to support maintenance and enhancements for Drupal.org. Program contributions have funded many initiatives, such as/p ulli Advancements in security/li li Improved development environments/li li User-friendly content strategy and design/li /ulpPartners enjoy enhanced promotional services from the Drupal Association, such as brand visibility on Drupal.org, select access at premier events like DrupalCon, and increased publicity via various online social platforms. For their elevated contributions to the program, Signature Partners will receive upgraded promotional services./p pI’m absolutely thrilled that Wunderkraut is joining us as the first Signature Supporting Partner, said Drupal Association Executive Director Holly Ross. Their support for the Association and the project is, and has always been, top-notch. This is another great expression of how much Wunderkraut believes in the incredible work our community does./p pTo join Wunderkraut as one of the Drupal Association's contributing partners, a href=https://assoc.drupal.org/supporting-partnersstart by learning more about the Supporting Partner Program/a./p pAnd to join us in thanking Wunderkraut for its partnership, we encourage you to a href=http://twitter.com/intent/tweet?text=Thanks+for+supporting+Drupal,+@Wunderkraut!+%23signatureDrupal+https://assoc.drupal.org/blog/bradleyfields/wunderkraut-first-drupal-signature-supporting-partner target=_blanksend this pre-populated tweet/a, or to a href=http://www.wunderkraut.com/blog/wunderkraut-first-drupal-signature-level-supporting-partner/2015-06-11 target=_blanksay thanks in the comments for their blog post/a./p /div/div/div

Mediacurrent: State of the Panels Union

Thu, 06/11/2015 - 17:22
img typeof=foaf:Image src=http://d1l4od7sxc8nwf.cloudfront.net/sites/default/files/styles/thumb_blog_spotlight/public/828.png?itok=E8jKSte5 width=200 height=152 / pOne of the most loved display architectures available for Drupal, the Panels module and its many related projects have come a long way from rather humble beginnings as a customizable dashboard for Drupal 4. Today they stand to be a testament to the power and flexibility of the Drupal platform. At DrupalCon LA I was joined by several other contributors, as we give an update to where the modules are right now, along with some insight into our plans for Drupal 8./p

Drupal Watchdog: HTML + CSS + JavaScript = Mobile Web App

Thu, 06/11/2015 - 17:08
div class=field field--article-edit-printtype field-type-list-text field-label-hidden field--rss Feature /div div class=field field--article-body field-type-text-long field-label-hidden field--rss pimg src=/sites/default/files/images/web/4.2-BuildingMobileApps.jpg alt=Photo width=65% align=right class=img-responsive img-thumbnail margin-left / If you're a web developer, perhaps you've heard of this newfangeldy “mobile” concept that's been sweeping the world. And perhaps you've even gone so far as reading a tutorial or two on how to create mobile applications. If so, you've seen that you get the emdelightful/em choice between Objective C and Swift (iOS), or Java (Android), all of which renders your hard-fought HTML, CSS, and JavaScript knowledge moot./p p But, lo! There is hope! /p p If you're someone for whom writing code in web parlance is a piece of cake (or at least more doable than C/Java), this article will explain how you can use the knowledge you already possess in order to create mobile applications using the following three ingredients:/p ullistronga href=http://wdog.it/4/2/jmjQuery Mobile/a/strong, an HTML5-based framework for developing web-based mobile applications./li listronga href=http://wdog.it/4/2/drestDrupal 8's Web Services modules/a/strong, which provide read and write access to Drupal's content for use in your application./li listronga href=http://wdog.it/4/2/pgAdobe PhoneGap/a/strong, which packages web-based applications as mobile apps for use on platforms such as iOS and Android./li /ulp Let's get started!/p h3About Our App/h3 p First, when developing mobile applications, it's customary to give some thought to the flow of the user interactions. Here are some basic wireframes:/p pimg src=/sites/default/files/images/print/wireframe_0.png alt= list and view. //p pFigure 1: The two main screens of our mobile application: list and view./p p The idea of our app is simple: display a list of nodes from the front page of a Drupal 8 site, and provide a links view for the content. Drupal 8’s web services can also edit and delete content, but we'll stick to view, both for article space constraints and to avoid some bugs that are still present in Drupal 8's alpha releases./p /div

DrupalCon News: Session Submission Recap for DrupalCon Barcelona

Thu, 06/11/2015 - 15:41
div class=field field--name-body field--type-text-with-summary field--label-hiddendiv class=field__itemsdiv class=field__item evendivPutting on a DrupalCon is a huge enterprise, and it wouldn’t happen without help from our amazing community. While our end goal is always that our guests have a great time at the convention, much of a Con’s success depends on the amazing men and women who step up to give sessions and lead training programs. /div div /div /div/div/div

Acquia: Migrating Content to Drupal: The Weather Channel

Thu, 06/11/2015 - 15:31
figure class=field-item even rel= resource=https://www.acquia.com/sites/default/files/migrating-twc-drupal-portability_0.png class=field-item even div id=styles-2 class=styles styles-field-image styles-style-scale_width_280 styles-container-image styles-preset-scale_width_280 img typeof=foaf:Image src=https://www.acquia.com/sites/default/files/styles/scale_width_280/public/migrating-twc-drupal-portability_0.png?itok=nFMFKqm4 alt= title= //div !-- render the title tag as caption -- /figure div class=field field-name-body field-type-text-with-summary field-label-hidden div class=field-items div property=content:encoded class=field-item evenpimg src=/sites/default/files/migrating-twc-drupal-portability_0.png alt=migrating drupal content truck //p pOne of the major challenges facing every digital publisher is making sure its content will display properly up on every possible venue: desktop, tablet, and phone of course, but also in web services, and on the emerging display opportunities arriving with the Internet of Things, like wearables. /p pAcquia partner a href=http://mediacurrent.com target=_blankMediacurrent/a recently tackled this challenge on an awesome scale: migrating the giant a href=http://weather.com target=_blankThe Weather Channel/a site to Drupal in a way that worked with all the above venues, and then some. (Have you thought about how your content will look on gas station pumps? Mediacurrent and The Weather Channel have.)/p pRecently, Matt Davis, a senior Drupal developer at Mediacurrent, explained how the team approached this task, in the first blog post in a projected series on the topic: a href=http://www.mediacurrent.com/blog/migrating-weathercom-drupal-increased-content-portability target=_blankMigrating Weather.com To Drupal: Increased Content Portability/a./p pIf your goal is to write once, use everywhere (and it should be), this post is worth checking out. /p /div /div /div div class=field field-name-field-tags field-type-taxonomy-term-reference field-label-inline clearfix div class=field-labelTags:nbsp;/div div class=field-items div rel= class=field-item evena href=/resources/acquia-drupal-planet typeof=skos:Concept property=rdfs:label skos:prefLabel datatype=acquia drupal planet/a/div /div /div span property=dc:title content=Migrating Content to Drupal: The Weather Channel class=rdf-meta element-hidden/span