`
aiou
  • 浏览: 193857 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

旁门左道做joomla多级分类二

阅读更多
下面的工作是将分类列表页的排布成一级分类下面紧跟其所属二级分类,显示出父子关系,如:
一级分类一
____二级分类一
____二级分类二
一级分类二
____二级分类三
____二级分类四
。。。

还是关系到两个文件:
admin.categorise.html.php 显示文件
admin.categorise.php 查询文件
分别与function show( &$rows, $section, $section_name, &$page, &$lists, $type )
    和function showCategories( $section, $option )有关
1.admin.categorise.php的function showCategories( $section, $option )是原始文件中的查询,会把所有的一级、二级分类查询出来并显示,我们需要的是某一级分类下的二级分类都紧跟在该一级分类下,所以原始的查询不会做到。
我的处理方法是先把所有的一级分类查询出来,在输出某一级分类时调用新添加的方法,将该分类的子分类查出来并按一定格式输出,就可以了。
所以把admin.categorise.php的function showCategories( $section, $option )的查询语句添加一个限定条件‘ AND c.parent_id = 0’以便只查询一级分类。

2.编写新方法:仿照function showCategories( $section, $option )编写查询子分类方法
function showSubCat($parent_id, $section, $option){
		global $mainframe;
  	$db	=& JFactory::getDBO();
	$filter_order		= $mainframe->getUserStateFromRequest( $option.'.filter_order',					'filter_order',		'c.ordering',	'cmd' );
	$filter_order_Dir	= $mainframe->getUserStateFromRequest( $option.'.filter_order_Dir',				'filter_order_Dir',	'',				'word' );
	$filter_state		= $mainframe->getUserStateFromRequest( $option.'.'.$section.'.filter_state',	'filter_state',		'',				'word' );
	$sectionid			= $mainframe->getUserStateFromRequest( $option.'.'.$section.'.sectionid',		'sectionid',		0,				'int' );
	$search				= $mainframe->getUserStateFromRequest( $option.'.search',						'search',			'',				'string' );
	$search				= JString::strtolower( $search );
	$section_name 	= '';

	if ($filter_order == 'c.ordering'){
			$order 			= ' ORDER BY  z.title, c.ordering';
		} else {
			$order 			= ' ORDER BY  '.$filter_order.' '. $filter_order_Dir.', z.title, c.ordering';
		}
		
	if ( $sectionid > 0 ) {
		$filter = ' AND c.section = '.$db->Quote($sectionid);
	} else {
		$filter = '';
	}
	if ( $filter_state ) {
		if ( $filter_state == 'P' ) {
			$filter .= ' AND c.published = 1';
		} else if ($filter_state == 'U' ) {
			$filter .= ' AND c.published = 0';
		}
	}
	if ($search) {
		$filter .= ' AND LOWER(c.title) LIKE '.$db->Quote( '%'.$db->getEscaped( $search, true ).'%', false );
	}
	
  	$query = 'SELECT  c.*, c.checked_out as checked_out_contact_category, g.name AS groupname, u.name AS editor'
	. ' , z.title AS section_name'
	. ' FROM #__categories AS c'
	. ' LEFT JOIN #__users AS u ON u.id = c.checked_out'
	. ' LEFT JOIN #__groups AS g ON g.id = c.access'
	. ' LEFT JOIN #__sections AS z ON z.id = c.section'
	. ' WHERE c.section NOT LIKE "%com_%"'
	. 'AND c.parent_id = '.$parent_id
	. $filter
	. ' AND c.published != -2'
	. ' GROUP BY c.id'
	. $order;
	$db->setQuery( $query );
	$rows = $db->loadObjectList();
	if ($db->getErrorNum()) {
		echo $db->stderr();
		return;
	}
	return $rows;
}


这样数据处理部分就结束了,剩下的就是显示的问题。

3.admin.categorise.html.php 的function show( &$rows, $section, $section_name, &$page, &$lists, $type )是显示分类列表的方法。对它进行改造。
找到循环输出条目的开始处:
		
for ($i=0, $n=count( $rows ); $i < $n; $i++) {
			$row 	= &$rows[$i];

下添加:
if(file_exists(dirname(__FILE__).DS.'admin.categories.php')){
			include_once(dirname(__FILE__).DS.'admin.categories.php');
			$row1 = showSubCat($row->id, $section, $option);
		}

将查询子分类的方法引入,并得到结果$row1
然后找到该一级分类输出结束处添加子分类的输出:
		foreach($row1 as $key=> $ro){
						JFilterOutput::objectHtmlSafe($ro);

			$ro->sect_link = JRoute::_( 'index.php?option=com_sections&task=edit&cid[]='. $ro->section );

			$link = 'index.php?option=com_categories&section='. $section .'&task=edit&cid[]='. $ro->id .'&type='.$type;

			$access 	= JHTML::_('grid.access',   $ro, $i );
			$checked 	= JHTML::_('grid.checkedout',   $ro, $i );
			$published 	= JHTML::_('grid.published', $ro, $i );
			?>
			<tr class="<?php echo "row$k"; ?>">
				<td>
					<?php echo $page->getRowOffset( $i ); ?>
				</td>
				<td>
					<?php echo $checked; ?>
				</td>
				<td>
					<span class="editlinktip hasTip" title="<?php echo JText::_( 'Title' );?>::<?php echo $ro->title; ?>">
					<?php
					if (  JTable::isCheckedOut($user->get ('id'), $ro->checked_out )  ) {
						if($ro->parent_id !=0) echo "——".$ro->title;
						else echo $ro->title;
					} else {
						?>
						<a href="<?php echo JRoute::_( $link ); ?>">
							<?php if($ro->parent_id !=0) echo "——".$ro->title; else echo $ro->title; ?></a>
						<?php
					}
					?></span>
				</td>
				<td align="center">
					<?php echo $published;?>
				</td>
				<td class="order">
					<span><?php echo $page->orderUpIcon( $i, ($ro->section == @$rows[$i-1]->section), 'orderup', 'Move Up', $ordering ); ?></span>
					<span><?php echo $page->orderDownIcon( $i, $n, ($ro->section == @$rows[$i+1]->section), 'orderdown', 'Move Down', $ordering ); ?></span>
					<?php $disabled = $ordering ?  '' : 'disabled="disabled"'; ?>
					<input type="text" name="order[]" size="5" value="<?php echo $ro->ordering; ?>" <?php echo $disabled ?> class="text_area" style="text-align: center" />
				</td>
				<td align="center">
					<?php echo $access;?>
				</td>
				<?php
				if ( $section == 'com_content' ) {
					?>
					<td>
						<a href="<?php echo $ro->sect_link; ?>" title="<?php echo JText::_( 'Edit Section' ); ?>">
							<?php echo $ro->section_name; ?></a>
					</td>
					<?php
				}
				?>
				<?php
				if ( $type == 'content') {
					?>
					<td align="center">
						<?php echo $ro->active; ?>
					</td>
					<td align="center">
						<?php echo $ro->trash; ?>
					</td>
					<?php
				}
				$k = 1 - $k;
				?>
				<td align="center">
					<?php echo $ro->id; ?>
				</td>
			</tr>
			<?php
		}

现在就可以显示了,如下图:


剩下的就是小问题了
  • 大小: 7.4 KB
1
1
分享到:
评论

相关推荐

    joomla分类组件 dj_classfilelds

    1. **分类管理**:该组件允许用户创建多级分类结构,便于组织不同类型的信息,如房产、车辆、工作、服务等。 2. **广告发布**:用户可以方便地发布和管理自己的广告,包括上传图片、设置价格、添加详细描述等。 3. *...

    joomla资料 joomla开发 joomla教程

    Joomla是一种开源的内容管理系统(CMS),它以其强大的功能和易用性在全球范围内受到广泛的欢迎。然而,尽管Joomla被公认为世界上最优秀的CMS之一,但在中国的普及和发展却面临着一些挑战。 首先,Joomla在中国的...

    joomla k2文章管理组件

    这款组件适用于构建复杂的内容结构,如博客、新闻网站或者任何需要详细分类和丰富媒体支持的网站。 1. **K2的核心功能**: - **多级类别**:K2允许创建多层类别,使得内容组织更加有序,便于用户浏览和搜索。 - *...

    joomla 1.5.8 中文版

    2. **内容管理**:Joomla 提供了强大的文章管理功能,允许用户创建、编辑和发布多种类型的内容,如新闻、博客文章、产品介绍等,同时支持多级分类和权限控制。 3. **模板系统**:Joomla 具有丰富的模板选择,用户...

    K2支持最新版joomla 2.5

    K2 是 Joomla 的一个增强型文章系统,提供更强大的内容管理功能,包括自定义字段、多图上传、分类管理等,深受开发者和网站管理员的喜爱。 描述中提到“K2最新版,支持joomla2.5,里面有中文汉化包”,这表明用户...

    joomla2.5 k2组件(汉化)

    凭借K2所提供的功能,可以为Joomla的内容添加不同的额外字段(fields),例如:代表该文章的图像、视频、相册以及其他附件等,另外也强化了Joomla本身的功能,例如:巢状式的分类(nested-level)、标签(tags)、评论...

    Joomla_K2_2.6.9_CN 中文版

    1. **高级内容类型**:K2支持文章、类别、标签等多种内容类型,可以创建复杂的分类结构,适合多种内容展示需求。 2. **丰富字段管理**:K2允许自定义字段,如图片、视频、下载链接等,丰富了内容的呈现方式。 3. **...

    joomla 资源

    Joomla的级联导航,也称为下拉菜单或多级菜单,是网站导航系统的一种常见实现。这种导航结构允许用户通过逐级展开的子菜单来访问深层页面,使网站的层级结构清晰可见,提高用户体验。在Joomla中,级联导航通常通过...

    joomla and joomla

    2. **模板系统**:Joomla 支持多种模板,允许用户根据需求定制网站外观和布局。 3. **多语言支持**:Joomla 具有内置的多语言功能,使创建多语种网站变得简单。 4. **组件、模块和插件**:Joomla 的组件、模块和...

    joomla模块用户列表

    Joomla是一款广泛使用的开源内容管理系统(CMS),它允许用户创建和管理网站,具有高度的可扩展性和灵活性。在Joomla中,“模块”是构建网站布局和功能的基本元素,它们可以显示在页面的不同位置,如侧边栏、页眉或...

    joomla组件K2 V2.3的汉化包

    Joomla是一款广受欢迎的内容管理系统(CMS),用于构建各种类型的网站,包括博客、企业网站和电子商务平台。K2是Joomla的一个强大扩展,提供了一个高级的内容管理解决方案,它增强了默认Joomla的内容发布功能,提供...

    Joomla K2插件中文包修正版k2_zh-CN_language_pack

    K2则是Joomla的一个强大扩展,提供更高级的文章管理功能,如分类、评论、附件、自定义字段等,使网站的内容组织和展示更加灵活。然而,对于中文用户来说,官方提供的中文语言包可能存在一些错误,影响到用户体验和...

    joomla 2.5 空白模板

    2. **CSS样式**:模板的样式表(通常为`template.css`)是定义页面视觉样式的地方。在空白模板中,你需要从零开始编写CSS,确保每个元素都有适当的样式,如字体、颜色、布局和响应式设计。 3. **JavaScript**:如果...

    joomla测试试用版

    K2是一款功能丰富的文章管理系统,为Joomla增加了许多额外的功能,如自定义字段、分类、评论、评分、多语言支持等。在Joomla的"components"目录下,你可以找到K2的相关组件,它使得内容创建和展示更加灵活和多样化。...

    joomla K2 COM 2.2

    K2 全称为 "K2 Content Management System",是 Joomla 的一款流行的内容管理组件,以其强大的内容组织、自定义字段、多级分类、用户权限管理等功能著称。在 Joomla 网站上,K2 可以作为一个独立的文章系统,也可以...

    Joomla!cmsV3.8.3

    **Joomla! CMS V3.8.3** 是一个强大且灵活的内容管理系统(CMS),它为用户提供了构建和管理各种类型网站的全面解决方案。Joomla! 的核心特性使其成为个人博客、企业网站、电子商务平台乃至复杂的分类信息系统的理想...

    joomla模板之二

    "Joomla模板之二"是一个专为Joomla1.5版本设计的模板,旨在提供一个简单易用且轻量级的界面,以满足那些寻求快速搭建网站的用户需求。 Joomla1.5是一个较老但仍然具有稳定性的版本,它支持众多的扩展和模板,使得...

Global site tag (gtag.js) - Google Analytics