WordPress后臺edit-tags.php里無限欄目分類實現

看看WordPress里的實現
服務器君一共花費了108.527 ms進行了4次數據庫查詢,努力地為您提供了這個頁面。
試試閱讀模式?希望聽取您的建議

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.zqhthc.tw/librarys/veda/detail/2562,歡迎訪問原出處。

不打個分嗎?

轉載隨意,但請帶上本文地址:

http://www.zqhthc.tw/librarys/veda/detail/2562

如果你認為這篇文章值得更多人閱讀,歡迎使用下面的分享功能。
小提示:您可以按快捷鍵 Ctrl + D,或點此 加入收藏

大家都在看

  1. [ 95 分 ] [ 23  ] 我回來了
  2. [ 95 分 ] [ 7  ] 中華智慧感悟:人之道

閱讀一百本計算機著作吧,少年

很多人覺得自己技術進步很慢,學習效率低,我覺得一個重要原因是看的書少了。多少是多呢?起碼得看3、4、5、6米吧。給個具體的數量,那就100本書吧。很多人知識結構不好而且不系統,因為在特定領域有一個足夠量的知識量+足夠良好的知識結構,系統化以后就足以應對大量未曾遇到過的問題。

奉勸自學者:構建特定領域的知識結構體系的路徑中再也沒有比學習該專業的專業課程更好的了。如果我的知識結構體系足以囊括面試官的大部分甚至吞并他的知識結構體系的話,讀到他言語中的一個詞我們就已經知道他要表達什么,我們可以讓他坐“上位”畢竟他是面試官,但是在知識結構體系以及心理上我們就居高臨下。

所以,閱讀一百本計算機著作吧,少年!

《數據結構與算法分析:C++描述(第3版)》 維斯 (Mark Allen Weiss) (作者), 張懷勇 (譯者), 等 (譯者)

《數據結構與算法分析:C++描述(第3版)》是數據結構和算法分析的經典教材,書中使用主流的程序設計語言C++作為具體的實現語言。書的內容包括表、棧、隊列、樹、散列表、優先隊列、排序、不相交集算法、圖論算法、算法分析、算法設計、攤還分析、查找樹算法、k-d樹和配對堆等。《數據結構與算法分析:C++描述(第3版)》適合作為計算機相關專業本科生的數據結構課程和研究生算法分析課程的教材。本科生的數據結構課程可以使用《數據結構與算法分析:C++描述(第3版)》第1章~第9章,多學時課程還可以講解第10章;研究生算法分析課程可以使用第6章~第12章。

更多計算機寶庫...

英超直播吻球网