Skip to content

KAV Design Blog Posts

How to get front page in Joomla 2.5

How to determine if the user is viewing the front page

Joomla 1.0 Joomla 1.0

In Joomla! 1.0.x it was possible to determine if the user was viewing the front page by using code like this:

<?php
if ($option == 'com_frontpage' || $option == '') {
	echo 'This is the front page';
}
?>

Joomla 1.5 Joomla 1.5

But in Joomla! 1.5.x the com_frontpage component is no longer present. This is how to achieve the same result in Joomla! 1.5.x

<?php
$menu = & JSite::getMenu();
if ($menu->getActive() == $menu->getDefault()) {
	echo 'This is the front page';
}
?>

This works by checking to see if the current active menu item is the default one.

Joomla 1.6 Joomla 1.7 Joomla 2.5 Joomla 1.6, 1.7 and 2.5

This is one of the ways:

<?php if (JRequest::getInt('Itemid') == your_id) : ?>
         <!-- special javascript -->
<?php endif; ?>

There are some differences in 1.6/1.7/2.5 to avoid Strict Standards errors. Use the following code for a site where all content is in the same language:

<?php
$app = JFactory::getApplication();
$menu = $app->getMenu();
if ($menu->getActive() == $menu->getDefault()) {
	echo 'This is the front page';
}
?>

For multi-lingual sites the front page is dependent on the currently selected language, so you will need to use code like this:

<?php
$app = JFactory::getApplication();
$menu = $app->getMenu();
if ($menu->getActive() == $menu->getDefault( 'en-GB' )) {
	echo 'This is the front page';
}
elseif ($menu->getActive() == $menu->getDefault( 'fr-FR' )) {
	echo 'Accueil';
}
?>

For multi-lingual sites, it could also be necessary to display a specific code/html for all Default Home pages.

<?php $app = JFactory::getApplication(); ?>
<?php $menu = $app->getMenu(); ?>
<?php $lang = JFactory::getLanguage(); ?>
<?php if ($menu->getActive() == $menu->getDefault($lang->getTag())) : ?>
etc.

 

For more info: http://docs.joomla.org/How_to_determine_if_the_user_is_viewing_the_front_page

Creating a dropdown menu in WordPress

In wordpress 3.0 and above there is a nice build in menu. To create a drop down menu using this menu system follow there articles:

http://new2wp.com/pro/jquery-drop-down-menu-wordpress-3-menu/

http://wphacks.com/top-5-wordpress-navigation-menu-tutorials/

This is the main code in the CSS to achive the result:

#menu-header ul ul {
	display: none; /* For testing, change to display: block; */
	list-style:none;
	z-index:100;
}
#menu-header ul li:hover > ul {
	display: block;
}

How to display an archive with all postst in WordPress?

To do this add another page template in your theme’s folder.

You could create a Page (Write > Write Page) called…,  that just uses a custom Page template implementing query_posts().

I do something similar on my site but don’t list every post! Just the categories with description and such. However, one can combine the idea of a Category Page with what I do on my ‘Archive’ Page:

Sometimes the  function wp_query(); brakes the pagination, so if this hapens use this code insted:

<?php $limit = get_option('posts_per_page'); 
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
query_posts('showposts=' . $limit . '&paged=' . $paged); 
$wp_query->is_archive = true; 
$wp_query->is_home = false; ?>

Notes:

$limit is assigned the ‘posts_per_page’ option from your WordPress settings, but can be changed to something else if you like:

$limit = 20;

These:

$wp_query->is_archive = true; $wp_query->is_home = false;

after the query_posts() are important as they force posts_nav_link() (and so pagination) to work, along with a few other helpful results gained for fooling WordPress into thinking we’re in the archive pages.

For the $paged stuff, see:
http://wordpress.org/support/topic/57912#post-312858

For more info: http://wordpress.org/support/topic/querying-all-posts

Allow member to have access to custom post type only. Permission to only edit their own posts

Here’s the solution:

http://wordpress.stackexchange.com/questions/14553/allow-member-to-have-access-to-custom-post-type-only-permission-to-only-edit-th

Which says:

Use Justin Tadlock’s plugin “Members“. It gives you the ability to create new roles and edit existing roles, as well as add custom capabilities. All that work that you’d have to do can be taken down to a few clicks.

I know you said in your comment on ZaMoose’s answer that you are ‘looking to write the functionality myself so I have full control over everything.’ That’s missing the whole point of open source software. Justin Tadlock released his plugin so you could use it precisely so you WOULD have complete control over everything.

If you really really want to reinvent the wheel, potentially wasting hundreds of hours of your own time I can’t stop you, but you could at least save yourself the trouble and use Tadlock’s plugin to learn how to do what you want.

Once you have a plugin that does what you want, you’ll need to change the 'map_meta_cap' flag to true and the 'capability_type' flag in your post type registration function so that it says something other than ‘post’, ‘page’, or any other ‘reserved’ type. Then, duplicate all the capabilities related to posts (e.g. edit_posts, edit_others_posts, publish_posts, etc.), using your capability type instead of posts. Make sure to assign all these permissions to administrators (you won’t be able to see the post type until you do this), then create your role, mimicking the ‘contributor’ role’s abilities for your post type.

For example, say your capability type was foobars, you would want to give ‘shop owners’ the edit_foobars, delete_foobars, and read capabilities. That way they can create their own draft foobars, and delete those drafts, but because they don’t have publish_foobars capabilities, they have to submit them for approval. Because they don’t have edit_published_foobars, all modifications to an approved foobar have to be approved.

How to disable wordpress html filter for posts and pages?

In some versions of WordPress there is a filter that strips some tags from the html code. If you want to remove this filter just open wp-includes/kses.php and find this row:

function kses_init_filters() {
    // Normal filtering.
    add_filter('pre_comment_content', 'wp_filter_kses');
    add_filter('title_save_pre', 'wp_filter_kses');

    // Post filtering
    add_filter('content_save_pre', 'wp_filter_post_kses');
    add_filter('excerpt_save_pre', 'wp_filter_post_kses');
    add_filter('content_filtered_save_pre', 'wp_filter_post_kses');
}

and comment out the rows that you need:

function kses_init_filters() {
    // Normal filtering.
    add_filter('pre_comment_content', 'wp_filter_kses');
    add_filter('title_save_pre', 'wp_filter_kses');

    // Post filtering
    //add_filter('content_save_pre', 'wp_filter_post_kses');
    add_filter('excerpt_save_pre', 'wp_filter_post_kses');
    //add_filter('content_filtered_save_pre', 'wp_filter_post_kses');
}

Then if you save the post in html it’s OK, but if you switch to normal view and then go back to html view the tags could be stripped again. This hapens most likely from the MCE Editor and to resolve this issue you could install a plugin called TinyMCE Valid Elements or some similar plugin.