ctools_plugin_example.module 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. /*
  3. * @file
  4. *
  5. * Working sample module to demonstrate CTools 3 plugins
  6. *
  7. * This sample module is only intended to demonstrate how external modules can
  8. * provide ctools plugins. There is no useful functionality, and it's only
  9. * intended for developers or for educational use.
  10. *
  11. * As far as possible, everything is kept very simple, not exercising all of
  12. * the capabilities of CTools or Panels.
  13. *
  14. * Although the ctools documentation suggests that strict naming conventions
  15. * be followed, this code attempts to follow only the conventions which are
  16. * required (the hooks), in order to demonstrate the difference. You can
  17. * certainly use the conventions, but it's important to know the difference
  18. * between a convention and a requirement.
  19. *
  20. * The advanced_help module is required, because both CTools and this module
  21. * provide help that way.
  22. *
  23. * There is a demonstration panel provided at /ctools_plugin_example/123
  24. */
  25. /**
  26. * Implements hook_menu
  27. */
  28. function ctools_plugin_example_menu() {
  29. $items = array();
  30. $items["admin/settings/ctools_plugin_example"] = array(
  31. 'title' => 'CTools plugin example',
  32. 'description' => t("Demonstration code, advanced help, and a demo panel to show how to build ctools plugins."),
  33. 'page callback' => 'ctools_plugin_example_explanation_page',
  34. 'access arguments' => array('administer site configuration'),
  35. 'type' => MENU_NORMAL_ITEM,
  36. );
  37. return $items;
  38. }
  39. /**
  40. * Implements hook_ctools_plugin_directory().
  41. *
  42. * It simply tells panels where to find the .inc files that define various
  43. * args, contexts, content_types. In this case the subdirectories of
  44. * ctools_plugin_example/panels are used.
  45. */
  46. function ctools_plugin_example_ctools_plugin_directory($module, $plugin) {
  47. if ($module == 'ctools' && !empty($plugin)) {
  48. return "plugins/$plugin";
  49. }
  50. }
  51. /**
  52. * Implement hook_ctools_plugin_api().
  53. *
  54. * If you do this, CTools will pick up default panels pages in
  55. * <modulename>.pages_default.inc
  56. */
  57. function ctools_plugin_example_ctools_plugin_api($module, $api) {
  58. // @todo -- this example should explain how to put it in a different file.
  59. if ($module == 'panels_mini' && $api == 'panels_default') {
  60. return array('version' => 1);
  61. }
  62. if ($module == 'page_manager' && $api == 'pages_default') {
  63. return array('version' => 1);
  64. }
  65. }
  66. /**
  67. * Just provide an explanation page for the admin section
  68. * @return unknown_type
  69. */
  70. function ctools_plugin_example_explanation_page() {
  71. $content = '<p>' . t("The CTools Plugin Example is simply a developer's demo of how to create plugins for CTools. It provides no useful functionality for an ordinary user.") . '</p>';
  72. $content .= '<p>' . t(
  73. 'There is a demo panel demonstrating much of the functionality provided at
  74. <a href="@demo_url">CTools demo panel</a>, and you can find documentation on the examples at
  75. !ctools_plugin_example_help.
  76. CTools itself provides documentation at !ctools_help. Mostly, though, the code itself is intended to be the teacher.
  77. You can find it in %path.',
  78. array(
  79. '@demo_url' => url('ctools_plugin_example/xxxxx'),
  80. '!ctools_plugin_example_help' => theme('advanced_help_topic', array('module' => 'ctools_plugin_example', 'topic' => 'Chaos-Tools--CTools--Plugin-Examples', 'type' => 'title')),
  81. '!ctools_help' => theme('advanced_help_topic', array('module' => 'ctools', 'topic' => 'plugins', 'type' => 'title')),
  82. '%path' => drupal_get_path('module', 'ctools_plugin_example'),
  83. )) . '</p>';
  84. return $content;
  85. }