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

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

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本书吧。很多人知识结构不好而且不系统,因为在特定领域有一个足够量的知识量+足够良好的知识结构,系统化以后就足以应对大量未曾遇到过的问题。

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

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

《代码之美》 聂雪军 (译者)

《代码之美》介绍了人类在一个奋斗领域中的创造性和灵活性:计算机系统的开发领域。在每章中的漂亮代码都是来自独特解决方案的发现,而这种发现是来源于作者超越既定边界的远见卓识,并且识别出被多数人忽视的需求以及找出令人叹为观止的问题解决方案。《代码之美》33章,有38位作者,每位作者贡献一章。每位作者都将自己心目中对于“美丽的代码”的认识浓缩在一章当中,张力十足。38位大牛,每个人对代码之美都有自己独特的认识,现在一览无余的放在一起,对于热爱程序的每个人都不啻一场盛宴。 虽然《代码之美》的涉猎范围很广,但也只能代表一小部分在这个软件开发这个最令人兴奋领域所发生的事情。

更多计算机宝库...