Add a custom action: Difference between revisions From Online Manual

Jump to: navigation, search
(Created page with "By the end of this article, you should be able to confidently create a basic action on your forum. ===What is an action?=== An action is a page off the base of your forum. It is...")
 
No edit summary
Line 15: Line 15:
====/index.php====
====/index.php====
'''Find'''
'''Find'''
     'xmlhttp' => array('Xml.php', 'XMLhttpMain'),
     <nowiki>'xmlhttp' => array('Xml.php', 'XMLhttpMain'),</nowiki>
'''Add After'''
'''Add After'''
   // Your Custom Action
   <nowiki>// Your Custom Action
   'youraction' => array('YourAction.php', 'YourActionMain'),
   'youraction' => array('YourAction.php', 'YourActionMain'),</nowiki>


[hr]Notes about the first edit: the array that defines actions inside index.php is alphabetically ordered, to keep everything organized, it is smart to label what the code you added was for, and also keep it alphabetically labeled. [quote]'action-in-url' => array('Source-File.php', 'FunctionToCall'),[/quote][hr]
[hr]Notes about the first edit: the array that defines actions inside index.php is alphabetically ordered, to keep everything organized, it is smart to label what the code you added was for, and also keep it alphabetically labeled. [quote]'action-in-url' => array('Source-File.php', 'FunctionToCall'),[/quote][hr]
Line 27: Line 27:


====./Sources/YourAction.php====
====./Sources/YourAction.php====
'''Add''
'''Add'''
  <?php
  <nowiki><?php
   
   
  if (!defined('SMF'))
  if (!defined('SMF'))
Line 53: Line 53:
  }
  }
   
   
  ?>
  ?></nowiki>


----
[hr]Notes about the source file: first of all, we make sure we are accessing the source file via SMF so that people can not directly access the file. Then, we globalize the variables we need for the main function, load our template, define our page title and our link tree item[hr]
Notes about the source file: first of all, we make sure we are accessing the source file via SMF so that people can not directly access the file. Then, we globalize the variables we need for the main function, load our template, define our page title and our link tree item
----


Now that we have our action defined, and a source file for our base, lets work on our template file.
Now that we have our action defined, and a source file for our base, lets work on our template file.
Line 67: Line 65:
===./Themes/default/YourAction.template.php===
===./Themes/default/YourAction.template.php===
'''Add'''
'''Add'''
 
<nowiki><?php
<code>
<?php
   
   
  function template_main()
  function template_main()
Line 79: Line 75:
  // Catbg header
  // Catbg header
  echo '<div class="cat_bar">
  echo '<div class="cat_bar">
  <h3 class="catbg">', $txt['your_action'], '</h3>
    <h3 class="catbg">', $txt['your_action'], '</h3>
  </div>';
  </div>';
   
   
Line 86: Line 82:
   <span class="topslice"><span></span></span>
   <span class="topslice"><span></span></span>
     <div class="content">Your Page Content</div>
     <div class="content">Your Page Content</div>
  <span class="botslice"><span></span></span>
  <span class="botslice"><span></span></span>
  </div><br />';
  </div><br />';
   
   
  }
  }
   
   
  ?>
  ?><nowiki>
</code>


Now our action should be accessible and working correctly, except no text will be showing, so lets define the strings we used.
Now our action should be accessible and working correctly, except no text will be showing, so lets define the strings we used.
Line 98: Line 93:
===./Themes/default/languages/Modifications.english.php===
===./Themes/default/languages/Modifications.english.php===
'''Add Before End'''
'''Add Before End'''
 
<nowiki>// Your Action Language Strings
// Your Action Language Strings
$txt['your_action'] = 'Your Action';
$txt['your_action'] = 'Your Action';
$txt['page_title'] = 'This is your page title';</nowiki>
$txt['page_title'] = 'This is your page title';


The final edit is very simple to do.
The final edit is very simple to do.
Line 107: Line 101:
===./Themes/default/languages/Who.english.php===
===./Themes/default/languages/Who.english.php===
'''Add Before End'''
'''Add Before End'''
<nowiki>// Your Action Who String
$txt['whoall_youraction'] = 'Viewing <a href="' . $scripturl . '?action=youraction">Your Action</a>.';</nowiki>


// Your Action Who String
[hr]The edit you make in Who.english.php defines the action for the ?action=who page. So people can see what action you are on.[hr]
$txt['whoall_youraction'] = 'Viewing <a href="' . $scripturl . '?action=youraction">Your Action</a>.';
 
----
The edit you make in Who.english.php defines the action for the ?action=who page. So people can see what action you are on.
----


Another optional edit would be to add a navigation tab for it. Take a peak at the document on adding tabs to do that.
Another optional edit would be to add a navigation tab for it. Take a peak at the document on adding tabs to do that.


Also remember to clear your forums cache or the text strings will not show up.
Also remember to clear your forums cache or the text strings will not show up.

Revision as of 21:26, 5 October 2010

By the end of this article, you should be able to confidently create a basic action on your forum.

What is an action?

An action is a page off the base of your forum. It is comprised of two files, one is a source file, and the second is a template file.

Source File

The source file is the base foundation of the action, it loads the template along with anything else the action might need, such as permissions or additional functions.

Template File

The template file is everything that you see when you go to ?action=youraction, it is defined to the action by the actions source file.

Now that we have a basic understanding of how actions work, lets begin!

First of all, we need to define the action along with the source file name and function.

/index.php

Find

   	'xmlhttp' => array('Xml.php', 'XMLhttpMain'),

Add After

 		// Your Custom Action
  		'youraction' => array('YourAction.php', 'YourActionMain'),

[hr]Notes about the first edit: the array that defines actions inside index.php is alphabetically ordered, to keep everything organized, it is smart to label what the code you added was for, and also keep it alphabetically labeled. [quote]'action-in-url' => array('Source-File.php', 'FunctionToCall'),[/quote][hr]

Now that we have defined our action, lets create our Source file.

Create a file in ./Sources named "YourAction.php".

./Sources/YourAction.php

Add

<?php
 
 if (!defined('SMF'))
 	die('Hack Attempt...');
 
 function YourActionMain()
 {
 
 	// Globalize what we need...
 	global $context, $scripturl, $txt;
 
 	// Load our template
 	loadTemplate('YourAction');
 
 	// Define a page title
 	$context['page_title'] = $txt['page_title'];
 
 	// Define our link tree
 	$context['linktree'][] = array(
   		'url' => $scripturl. '?action=youraction',
  		'name' => $txt['your_action'],
 	);
 
 }
 
 ?>

[hr]Notes about the source file: first of all, we make sure we are accessing the source file via SMF so that people can not directly access the file. Then, we globalize the variables we need for the main function, load our template, define our page title and our link tree item[hr]

Now that we have our action defined, and a source file for our base, lets work on our template file.

Go to ./Themes/default and create a file named "YourAction.template.php".

Once created, complete the following edit.

./Themes/default/YourAction.template.php

Add

<?php
 
 function template_main()
 {
 
 	// Globalize what we need...
 	global $txt;
 
 	// Catbg header
 	echo '<div class="cat_bar">
    			<h3 class="catbg">', $txt['your_action'], '</h3>
 	</div>';
 
 	// Windowbg2 Content
 	echo '<div class="windowbg2">
   			<span class="topslice"><span></span></span>
   		  		<div class="content">Your Page Content</div>
   			<span class="botslice"><span></span></span>
 	</div><br />';
 
 }
 
 ?><nowiki>

Now our action should be accessible and working correctly, except no text will be showing, so lets define the strings we used.

===./Themes/default/languages/Modifications.english.php===
'''Add Before End'''
 <nowiki>// Your Action Language Strings
 $txt['your_action'] = 'Your Action';
 $txt['page_title'] = 'This is your page title';

The final edit is very simple to do.

./Themes/default/languages/Who.english.php

Add Before End

// Your Action Who String
 $txt['whoall_youraction'] = 'Viewing <a href="' . $scripturl . '?action=youraction">Your Action</a>.';

[hr]The edit you make in Who.english.php defines the action for the ?action=who page. So people can see what action you are on.[hr]

Another optional edit would be to add a navigation tab for it. Take a peak at the document on adding tabs to do that.

Also remember to clear your forums cache or the text strings will not show up.



Advertisement: