Fine tune node permissions

The default CRUD + view operations on nodes can be fine tuned by using

  1. /**
  2.  * Implements hook_menu_alter().
  3.  */
  4. function mymodule_menu_alter(&$items) {
  5. $items['node/%node/edit']['access callback'] = '_mymodule_node_edit_form_access';
  6. $items['node/%node/edit']['access arguments'] = array(1);
  7. }
  8.  
  9. function _mymodule_node_edit_form_access($node) {
  10. $type = is_string($node) ? $node : $node->type;
  11. if ($type == 'webform') {
  12. // Do some additional checks.
  13. return FALSE;
  14. }
  15. }
  16. // Otherwise use the default access rules.
  17. return node_access('edit', $node);
  18. }

Note that this can be achieved in some cases by simply using hook_node_access() ...

Display errors - WSOD

The bootstrap override the values you could set to display error ad the reporting level. To be 100% sure everything is printed out when something fails in a blank screen (wsod), make index.php like this:

Properly render a field

Drupal offers a few (sometimes complicated...) solutions to output a field. Lets take an example with a date field.
To display the full rendered field: field_view_field()

Using once()

ensure ajax reload don't apply the behaviours for items already processed

Change the theme

Programmatically change the theme on runtime by implementing hook_custom_theme()

Manually clear caches

for views and panels

Add a Jquery ui library

get the library names to use in /misc/ui folder

Embed a custom page

Get the rendered output of a custom page created with page manager (ctools) module

Embed a mini panel

Get the html output of a mini-panel

alter / automatize the install process

in the .profile file of the install profile (here "mysnippet" profile)

Aegir: perform custom tasks after a new site is installed

in a custom module, in a file called mysnippet.drush.inc (keep in mind that the install process is handled by drush...)