WordPress后台edit-tags.php里无限栏目分类实现

看看WordPress里的实现
服务器君一共花费了283.820 ms进行了6次数据库查询,努力地为您提供了这个页面。
试试阅读模式?希望听取您的建议

WordPress 里 http://localhost/wordpress3.6.1/wp-admin/edit-tags.php?taxonomy=category 这个链接可以显示 WP 里的无限栏目分类,我们来研究一下 WordPress 是如何实现的。

找到 wp-admin/edit-tags.php 这个文件,发现显示栏目的代码很少:

<form id="posts-filter" action="" method="post">
<input type="hidden" name="taxonomy" value="<?php echo esc_attr($taxonomy); ?>" />
<input type="hidden" name="post_type" value="<?php echo esc_attr($post_type); ?>" />

<?php $wp_list_table->display(); ?>

<br class="clear" />
</form>

其实关键的是 $wp_list_table->display(); 这一行代码。

wordpress 的类库 wp_list_table 自始至终都是用来显示数据,例如用户,插件,评论或是文章,这个类库包含了几乎所有的用于显示、排序、分页和搜索的方法。

我们继续追踪下,打开 wp-admin/includes/class-wp-list-table.php 这个文件,找到 display(); 方法:

	/**
	 * Display the table
	 *
	 * @since 3.1.0
	 * @access public
	 */
	function display() {
		extract( $this->_args );

		$this->display_tablenav( 'top' );

?>
<table class="wp-list-table <?php echo implode( ' ', $this->get_table_classes() ); ?>" cellspacing="0">
	<thead>
	<tr>
		<?php $this->print_column_headers(); ?>
	</tr>
	</thead>

	<tfoot>
	<tr>
		<?php $this->print_column_headers( false ); ?>
	</tr>
	</tfoot>

	<tbody id="the-list"<?php if ( $singular ) echo " data-wp-lists='list:$singular'"; ?>>
		<?php $this->display_rows_or_placeholder(); ?>
	</tbody>
</table>
<?php
		$this->display_tablenav( 'bottom' );
	}

我们再着眼于生成栏目分类的下面这几行代码:

<tbody id="the-list"<?php if ( $singular ) echo " data-wp-lists='list:$singular'"; ?>>
	<?php $this->display_rows_or_placeholder(); ?>
</tbody>

display_rows_or_placeholder() 这个函数又是怎么回事呢?

/**
 * Generate the <tbody> part of the table
 *
 * @since 3.1.0
 * @access protected
 */
function display_rows_or_placeholder() {
	if ( $this->has_items() ) {
		$this->display_rows();
	} else {
		list( $columns, $hidden ) = $this->get_column_info();
		echo '<tr class="no-items"><td class="colspanchange" colspan="' . $this->get_column_count() . '">';
		$this->no_items();
		echo '</td></tr>';
	}
}

接下来是 has_items() 这个函数,这个函数判断有没有数据需要显示:

/**
 * Whether the table has items to display or not
 *
 * @since 3.1.0
 * @access public
 *
 * @return bool
 */
function has_items() {
	return !empty( $this->items );
}

如果有,就 display_rows() :

/**
 * Generate the table rows
 *
 * @since 3.1.0
 * @access protected
 */
function display_rows() {
	foreach ( $this->items as $item )
		$this->single_row( $item );
}

/**
 * Generates content for a single row of the table
 *
 * @since 3.1.0
 * @access protected
 *
 * @param object $item The current item
 */
function single_row( $item ) {
	static $row_class = '';
	$row_class = ( $row_class == '' ? ' class="alternate"' : '' );

	echo '<tr' . $row_class . '>';
	$this->single_row_columns( $item );
	echo '</tr>';
}

/**
 * Generates the columns for a single row of the table
 *
 * @since 3.1.0
 * @access protected
 *
 * @param object $item The current item
 */
function single_row_columns( $item ) {
	list( $columns, $hidden ) = $this->get_column_info();

	foreach ( $columns as $column_name => $column_display_name ) {
		$class = "class='$column_name column-$column_name'";

		$style = '';
		if ( in_array( $column_name, $hidden ) )
			$style = ' style="display:none;"';

		$attributes = "$class$style";

		if ( 'cb' == $column_name ) {
			echo '<th scope="row" class="check-column">';
			echo $this->column_cb( $item );
			echo '</th>';
		}
		elseif ( method_exists( $this, 'column_' . $column_name ) ) {
			echo "<td $attributes>";
			echo call_user_func( array( &$this, 'column_' . $column_name ), $item );
			echo "</td>";
		}
		else {
			echo "<td $attributes>";
			echo $this->column_default( $item, $column_name );
			echo "</td>";
		}
	}
}

也就是说,根据是否有子栏目先拼凑好栏目分类的 html,再通过 $wp_list_table->display(); 显示到前台。

本文地址:http://www.nowamagic.net/librarys/veda/detail/2562,欢迎访问原出处。

不打个分吗?

转载随意,但请带上本文地址:

http://www.nowamagic.net/librarys/veda/detail/2562

如果你认为这篇文章值得更多人阅读,欢迎使用下面的分享功能。
小提示:您可以按快捷键 Ctrl + D,或点此 加入收藏

阅读一百本计算机著作吧,少年

很多人觉得自己技术进步很慢,学习效率低,我觉得一个重要原因是看的书少了。多少是多呢?起码得看3、4、5、6米吧。给个具体的数量,那就100本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

奉劝自学者:构建特定领域的知识结构体系的路径中再也没有比学习该专业的专业课程更好的了。如果我的知识结构体系足以囊括面试官的大部分甚至吞并他的知识结构体系的话,读到他言语中的一个词我们就已经知道他要表达什么,我们可以让他坐“上位”毕竟他是面试官,但是在知识结构体系以及心理上我们就居高临下。

所以,阅读一百本计算机著作吧,少年!

《软件随想录:程序员部落酋长Joel谈软件》 Joel Spolsky (作者), 阮一峰 (译者)

《软件随想录:程序员部落酋长Joel谈软件》是一部关于软件技术、人才、创业和企业管理的随想文集,作者以诙谐幽默的笔触将自己在软件行业的亲身感悟娓娓道来,观点新颖独特,内容简洁实用。全书分为 36讲,每一讲都是一个独立的专题。《软件随想录:程序员部落酋长Joel谈软件》从不同侧面满足了软件开发人员、设计人员、管理人员及从事软件相关工作的人员的学习与工作需要。

更多计算机宝库...