This hack enables you to display articles as horizontal tabbed items in Content 0.5. It works for items created in the WYSIWG editor and PageWraps (not external URLs). E.g.
The Restaurant (main menu)
The Restaurant - Bar Price List (submenu)
The Restaurant - Catering (submenu)
will display as:
The Restaurant | Bar Price List | Catering
Please note:
* It only works with Content 0.5
* It only displays tabs for main menu items and one submenu level.
* It only works if items are marked 'visible'.
* It's only been tested in XOOPS 2.0.13.2.There are just 2 files to replace: 'content/index.php' and 'content/templates/ct_index.html'. The code for each is included below (please make backups first).
The actual tab CSS is embedded in the 'ct_index.html' template. You can mess around with this to change the tab style if you want. I've tested it in IE and Firefox and it all seems to work, but don't blame me if it spoils your whole day! I also don't think my SQL is very efficient, so if anyone can improve on it please do!.
index.php
// ------------------------------------------------------------------------ //
// XOOPS - PHP Content Management System //
// Copyright (c) 2000 xoops.org //
// //
// ------------------------------------------------------------------------ //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation; either version 2 of the License, or //
// (at your option) any later version. //
// //
// You may not change or alter any portion of this comment or credits //
// of supporting developers from this source code or any supporting //
// source code which is considered copyrighted (c) material of the //
// original comment or credit authors. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program; if not, write to the Free Software //
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //
// ------------------------------------------------------------------------- //
// Author: Tobias Liegl (AKA CHAPI) //
// Site: http://www.chapi.de //
// Project: The XOOPS Project //
// ------------------------------------------------------------------------- //
include "../../mainfile.php";
// ------------------------------------------------------------------------- //
// Peekays Tab Hack //
// ------------------------------------------------------------------------- //
if ( file_exists("language/".$xoopsConfig['language']."/modinfo.php") ) {
include("language/".$xoopsConfig['language']."/modinfo.php");
} else {
include("language/english/modinfo.php");
}
$xoopsOption['template_main'] = 'ct_index.html';
include_once XOOPS_ROOT_PATH.'/header.php';
// Create a new PHP var and set it to contain the result of the tab-maker function
$tabdata=tabMaker();
// Create a new Smarty variable (tabs) and assign it the contents of the PHP var
$xoopsTpl->assign('tabs', $tabdata);
// create the function
function tabMaker(){
// set XOOPS database as a global var
global $xoopsDB;
// get the current story id
$thisid = ($_REQUEST['id']);
// get the current story parent details and put the value into a var
$query1 = $xoopsDB->query("SELECT parent_id FROM ".$xoopsDB->prefix('content')." WHERE storyid=$thisid");
while($myrow1 = $xoopsDB->fetchArray($query1) )
{
$thisid_parent = $myrow1['parent_id'];
}
// create a new array
$tabs=array();
// create a counter
$q=1;
// Query the DB and put story data into the array.
$query = $xoopsDB->query("SELECT storyid, parent_id, blockid, submenu, title, visible FROM ".$xoopsDB->prefix('content')." WHERE storyid=$thisid OR parent_id=$thisid OR storyid=$thisid_parent OR parent_id= CASE WHEN $thisid_parent >0 THEN $thisid_parent ELSE $thisid END AND visible=1");
while($myrow = $xoopsDB->fetchArray($query) )
{
$tabs[$q]['storyid'] = $myrow['storyid'];
$tabs[$q]['parent_id'] = $myrow['parent_id'];
$tabs[$q]['blockid'] = $myrow['blockid'];
$tabs[$q]['submenu'] = $myrow['submenu'];
$tabs[$q]['title'] = $myrow['title'];
$tabs[$q]['visible'] = $myrow['visible'];
$q++;
}
return $tabs;
}
// ------------------------------------------------------------------------- //
// END of Peekays Tab Hack //
// ------------------------------------------------------------------------- //
$id = isset($HTTP_GET_VARS['id']) ? intval($HTTP_GET_VARS['id']) : 0;
if ($id != 0) {
$result = $xoopsDB->queryF("SELECT storyid, title, text, visible, nohtml, nosmiley, nobreaks, nocomments, link, address FROM ".$xoopsDB->prefix(_MIC_CONTENT_PREFIX)." WHERE storyid=$id");
}
else {
$result = $xoopsDB->queryF("SELECT storyid FROM ".$xoopsDB->prefix(_MIC_CONTENT_PREFIX)." WHERE homepage=1");
list($storyid) = $xoopsDB->fetchRow($result);
header("Location: $PHP_SELF?id=$storyid");
}
include_once XOOPS_ROOT_PATH.'/header.php';
list($storyid,$title,$text,$visible,$nohtml,$nosmiley,$nobreaks,$nocomments,$link,$address) = $xoopsDB->fetchRow($result);
if ($link == 1) {
// include external content
$includeContent = XOOPS_ROOT_PATH."/modules/"._MIC_DIR_NAME."/content/".$address;
if (file_exists($includeContent)){
$xoopsOption['template_main'] = 'ct_index.html';
ob_start();
include($includeContent);
$content = ob_get_contents();
ob_end_clean();
//$content = include($includeContent);
$xoopsTpl->assign('title', $title);
$xoopsTpl->assign('content', $content);
$xoopsTpl->assign('nocomments', $nocomments);
$xoopsTpl->assign('mail_link', 'mailto:?subject='.sprintf(_C_INTARTIGO,$xoopsConfig['sitename']).'&body='.sprintf(_C_INTARTFOUND, $xoopsConfig['sitename']).': '.XOOPS_URL.'/modules/content/index.php?id='.$id);
$xoopsTpl->assign('lang_printerpage', _C_PRINTERFRIENDLY);
$xoopsTpl->assign('lang_sendstory', _C_SENDSTORY);
$xoopsTpl->assign('id', $id);
}
else{
redirect_header("index.php",1,_C_FILENOTFOUND);
}
}
else {
// tiny content
$xoopsOption['template_main'] = 'ct_index.html';
if ($nohtml == 1) { $html = 0; } else { $html = 1; }
if ($nosmiley == 1) { $smiley = 0; } else { $smiley = 1; }
if ($nobreaks == 1) { $breaks = 0; } else { $breaks = 1; }
$myts =& MyTextSanitizer::getInstance();
$text=$myts->displayTarea($text, $html, $smiley, 1, 1, $breaks);
$xoopsTpl->assign('title', $title);
$xoopsTpl->assign('content', $text);
$xoopsTpl->assign('nocomments', $nocomments);
$xoopsTpl->assign('mail_link', 'mailto:?subject='.sprintf(_C_INTARTIGO,$xoopsConfig['sitename']).'&body='.sprintf(_C_INTARTFOUND, $xoopsConfig['sitename']).': '.XOOPS_URL.'/modules/content/index.php?id='.$id);
$xoopsTpl->assign('lang_printerpage', _C_PRINTERFRIENDLY);
$xoopsTpl->assign('lang_sendstory', _C_SENDSTORY);
$xoopsTpl->assign('id', $id);
}
include XOOPS_ROOT_PATH.'/include/comment_view.php';
include_once XOOPS_ROOT_PATH.'/footer.php';
?>
ct_index.html
<style type="text/css">
#tabmenu {
color: #000000;
border-bottom: 2px solid #cccccc;
margin: 12px 0px 0px 0px;
padding: 0px;
z-index: 1;
padding-left: 10px
}
#tabmenu li {
display: inline;
overflow: hidden;
list-style-type: none;
}
#tabmenu a, a.active {
color: #000000;
background: #ffffff;
font-family: Verdana, Arial, sans-serif;
font-size: 11px;
font-weight: normal;
line-height: 2.0;
border: 2px solid #cccccc;
margin: 0;
text-decoration: none;
}
/* For IE */
#tabmenu a, a.active { padding: 4px 5px 4px 5px;}
/* and for other browsers */
html>body #tabmenu a, a.active { padding: 4px 5px 5px 5px;}
#tabmenu a.active {
background: #ffffff;
/* Border bottom same colour as active page */
border-bottom: 3px solid #ffffff;
}
#tabmenu a:hover {
color: #000000;
background: #eeeeee;
}
#tabmenu a:visited {
color: #000000;
}
#tabmenu a.active:hover {
background: transparent;
color: #000000;
}
#tabcontent {
font: 0.9em/1.3em verdana, arial, sans-serif;
background: #ffffff;
padding: 20px;
border: 2px solid #cccccc;
border-top: none;
z-index: 2;
}
#tabcontent a {
text-decoration: none;
}
#tabcontent a:hover {
background: transparent;
}
style>
<ul id="tabmenu">
<{foreach item=tab from=$tabs}>
<li><{if $tab.storyid == $id}><a class="active" href="index.php?id=<{$tab.storyid}>"><{$tab.title}>a>
<{else}><{if $tab.storyid != $id}>
<a href="index.php?id=<{$tab.storyid}>"><{$tab.title}>a><{/if}><{/if}>li>
<{/foreach}>
ul>
<div id="tabcontent">
<{$content}>
div>
<{if $xoops_isadmin == 1}>
<div align="right"><a href="<{$xoops_url}>/modules/content/admin/index.php?op=submit&return=1&id=<{$id}>"><img
src="<{$xoops_url}>/modules/content/images/add.gif" alt="" border="0"
align="absmiddle">a> <a
href="<{$xoops_url}>/modules/content/admin/index.php?op=edit&id=<{$id}>&return=1"><img
src="<{$xoops_url}>/modules/content/images/edit.gif" alt="" border="0" align="absmiddle">a>div>
<{/if}>
<div class="printandemail">
<a href="print.php?id=<{$id}>" target="_new"><img
src="<{$xoops_url}>/modules/content/images/print.gif" alt="" width="16" height="16" border="0"
align="absmiddle">a>
<a href="<{$mail_link}>"><img
src="<{$xoops_url}>/modules/content/images/email.gif" alt="" width="16" height="10" border="0"
align="absmiddle">a>div>
div>
<{if $nocomments == 0}>
<br /><br />
<div style="text-align: center; padding: 3px; margin: 3px;">
<{$commentsnav}>
<{$lang_notice}>
div>
<div style="margin: 3px; padding: 3px;">
<{if $comment_mode == "flat"}>
<{include file="db:system_comments_flat.html"}>
<{elseif $comment_mode == "thread"}>
<{include file="db:system_comments_thread.html"}>
<{elseif $comment_mode == "nest"}>
<{include file="db:system_comments_nest.html"}>
<{/if}>
div>
<{/if}>
Tip:
To have your Content module display 'Main menu' items in the XOOPS main menu:
1) Disable XOOPS own 'Main Menu' block.
2) Enable the Content module 'Site Menu' block.
3) Hide the Content module in the site menu by entering a '0' instead of a '1' in XOOPS module admin.
4) Arrange the menu items by selecting 'Order Site Menu Block' in Content admin.
Credits:
davinci27 - for the very nice Content module.
Kaotik - for a great beginners guide to using PHP and Smarty in Xoops.
A thread is for life. Not just for Christmas.