Future-Proof Your Drupal 7 Site
Midcamp 2014
Dave Reid / @davereid
About Me
Senior Developer at Lullabot
Twitter: @davereid
IRC: davereid
Maintain amost 2% of contrib modules
Core subsystem maintainer
Father of two cats and one boy
Objectives
For your site builders
and architects to make
informed choices now
Ease pain of site users
when switching to Drupal 8
User Interface
Spark Distribution
Navbar
Inline Editing
Official WYSIWYG: CKEditor
Responsive Preview
Responsive Bartik
https://drupal.org/project/responsive_bartik
HTML5
VIEWS IN CORE!
Administration Views
https://drupal.org/project/admin_views
Views Bulk Operations (light)
https://drupal.org/project/views_bulk_operations
Views Responsive Grid
Responsive Tables
Breakpoints
Responsive Pictures
Tours
Module page filtering
https://drupal.org/project/instantfilter
Simplified Menu Administration
https://drupal.org/project/simplified_menu_admin
Escape Admin
Field types
Entity reference
NOT Node or User reference modules
Telephone
NOT phone module
Email (lite)
URL
NOT link module
Datetime (Date lite)
For developers
APIs and Plugins
Libraries
Hooks
/**
* Implements hook_mymodule_hook_info().
*/
function example_mymodule_hook_info() {
$info['example'] = array(
'label' => t('Example implementation'),
'callback' => 'example_mymodule_callback',
'settings form' => 'example_mymodule_form',
);
return $info;
}
CTools plugins
/**
* Implements hook_ctools_plugin_directory().
*/
function example_ctools_plugin_directory($module, $plugin) {
if ($module == 'mymodule' && $plugin == 'hook') {
return "plugins/$module/$plugin";
}
}
// plugins/example/hook/example_implementation.inc
$plugin = array(
'title' => t('Example implementation'),
'class' => 'ExampleMyModuleHookImplementation',
);
// plugins/example/hook/ExampleImplementation.class.php
class ExampleMyModuleHookImplementation {
// Does stuff.
}
Plugins in D7
lib/MyModuleHookPluginInterface.php
class MyModuleHookPluginInterface {
public static function getInstance($config = array());
public function getDefaults();
public function process($config);
}
lib/MyModuleHookDefaultPlugin.phpabstract class MyModuleHookDefaultPlugin extends MyModuleHookPluginInterface {
public funciton getInstnace($config = array()) {
$class = get_called_class();
return new $class($config);
}
public function getDefaults() {
return array();
}
abstract public function process($config);
}
Plugins in D7
example.module
/**
* Implements hook_mymodule_hook_info().
*/
function example_mymodule_hook_info() {
$info['example'] =
'label' => t('Example implementation'),
'class' => ExampleMyModuleHookPlugin',
);
return $info;
}
example.info
files[] = lib/ExampleMyModuleHookPlugin.php
lib/ExampleMyModuleHookPlugin.phpclass ExampleMyModuleHookPlugin extends MyModuleHookDefaultPlugin {
public function process($config) {
// Do stuff!
}
}
The Other Stuff
CMI
Migrate is your friend
https://drupal.org/project/migrate
https://drupal.org/project/migrate_d2d
RESTful Web Services
https://drupal.org/project/restws
NOT services module
Translation
PSR-0 / PSR-4
https://drupal.org/project/xautoload
More things
Composer / Composer Manager
phpunit
D7 libraries (Symfony, backbone, etc)
Bean for blocks
JS local storage
Caption filter
Guzzle
Things you should probably stop using
We don't want no scrubs
Thank you!
Questions?
2014-03-29
By davereid
2014-03-29
- 3,277