I encountered small problem which I cant figure out. I have a website, and there will be set of pages which will be custom made ( but with template of the page ), just the custom content.
For example: http://mypage.com/?q=stuff
I read about hooking and made file - page--stuff.tpl.php and duplicated page.tpl.php, but page title is - Page not found and i don't i'm doing it right, because of duplicating page.tpl.php
Those pages will include custom hand written modules and custom PHP code, but overall layout will be same as other nodes.
How i could do this?
To create a page which is not linked to a node you have to implement hook_menu in a self-made module.
function MODULENAME_menu() {
return array("stuff" => array( // link (in your case: http://mypage.com/stuff)
'title' => "stuff", // title of the page
'page callback' => "themefunction", // logic for the content
'type' => MENU_CALLBACK // there are more types, read hoo_menu() for further details
);
}
You can substitute themefunction with anything you like, but you have to implement it!
function themefunction() {
// do some theming output stuff like:
$items['hello'] = "Hello World!"; // your variable output
return theme('stuff_theme', array('items' => $items)); // say Drupal to theme that stuff in your default page-template
}
Then you need to register your theme in Drupal by implementing hook_theme (that is also don in your main module file)
function MODULENAME_menu() {
return array(
'stuff_theme' => array( // file name of the template WITHOUT .tpl.php
'variables' => array(
'items' => NULL // variables that are assigned to the template
)
)
);
}
Finally you need to create the template *stuff_theme.tpl.php* (in the module-folder):
<div><?= $items['hello']; ?></div>
Unfortunately that's the only way to create truly custom content-pages. For small code-injections into a node you can also enable the PHP filter module.