目錄
決定格式
加價
' . __( 'Export Activity Logs', 'wptuts-log' ) . '
建立匯出檔案
摘要
首頁 後端開發 php教程 資料匯出:自訂資料庫表

資料匯出:自訂資料庫表

Sep 02, 2023 pm 06:01 PM
數據導出 客製化 資料庫表

<p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/887/227/169364887365792.jpg" class="lazy" alt="資料匯出:自訂資料庫表"></p> <p>如本系列的第一篇文章中所提到的,自訂資料庫表的主要問題之一是它們不由現有的匯入和匯出處理程序處理。本文旨在解決這個問題,但應該指出的是,目前還沒有完全令人滿意的解決方案。 </p> <p>讓我們考慮兩種情況:</p> <ol> <li>自訂表格引用本機 WordPress 表格</li> <li>自訂表格完全獨立於原生表格</li> </ol> <p>「最壞情況」是第一種情況。以保存使用者活動日誌的自訂表為例。它引用使用者 ID、物件 ID 和物件類型 - 所有這些都引用儲存在本機 WordPress 表中的資料。現在想像一下,有人想要將其 WordPress 網站中的所有資料匯入到第二個網站中。例如,完全有可能在匯入貼文時,WordPress 必須為其指派一個新的 ID,因為第二個網站中可能已經存在具有該 ID 的貼文。 </p> <p>在這種情況下,有必要追蹤此類變更並更新表中引用的 ID。這本身就沒那麼困難。 <em>不幸的是</em>,用於處理從其他 WordPress 網站匯入資料的 WordPress Importer 外掛程式缺乏必要的掛鉤來實現這一點。正如此評論中所建議的,一種潛在的解決方法是將資料也儲存在後元中。不幸的是,這會導致重複數據,並且違反資料庫規範化——通常不是一個好主意。最後,它僅在少數用例中真正可行。 </p> <p>第二種情況避免了這種複雜性,但仍需要自訂匯入和匯出處理程序。我們將在接下來的兩篇文章中示範這種情況。但是,為了與本系列的其餘部分保持一致,我們將堅持使用活動日誌表,即使它是情況 (1) 的範例。 </p> <hr> <h2 id="決定格式">決定格式</h2> <p>首先我們需要決定匯出文件採用的格式。最佳格式取決於資料的性質(或“結構”)及其使用方式。在我看來,XML 通常更好,因為它可以處理一對多關係。然而,有時如果數據是表格形式,那麼 CSV 可能更可取,特別是因為它易於與電子表格應用程式整合。在此範例中,我們將使用 XML。 </p> <hr> <h2 id="加價">加價</h2> <p>下一步是建立一個管理頁面,以允許使用者匯出日誌表中的資料。我們將建立一個類,該類將在「工具」選單項目下方新增一個頁面。此頁面僅包含一個按鈕,提示使用者下載匯出檔案。該類別還將添加一個處理程序來偵聽表單提交並觸發文件下載。 </p> <p>首先讓我們來看看類別的結構,然後再填寫其方法的詳細資訊。 </p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>class WPTuts_Log_Export_Admin_Page{ /** * The page hook suffix */ static $hook_suffix=''; static function load(){ add_action('admin_menu', array(__CLASS__,'add_submenu')); add_action('admin_init', array(__CLASS__,'maybe_download')); } static function add_submenu(){} static function maybe_download(){} static function display(){} } WPTuts_Log_Export_Admin_Page::load(); </pre><div class="contentsignin">登入後複製</div></div> <p><code>WPTuts_Log_Export_Admin_Page::load()</code> 初始化類別並將回呼掛鉤到適當的操作:</p> <ul> <li> <code>add_submenu</code> – 負責在「工具」功能表下新增頁面的方法。 </li> <li> <code>maybe_download</code> – 此方法將監聽檢查是否已提交下載請求。這也將檢查權限和隨機數。 </li> </ul> <p>需要在發送任何標頭之前儘早呼叫匯出偵聽器,因為我們將自己設定這些標頭。我們可以將其掛接到 <code>init</code> 上,但由於我們只允許在管理中下載匯出文件,因此 <code>admin_init</code> 在這裡更合適。 </p> <p>向選單新增頁面非常簡單。要在「工具」下新增頁面,我們只需呼叫 <code>add_management_page()</code>。 </p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>static function add_submenu(){ self::$hook_suffix = add_management_page( __('Export Logs','wptuts-log'), __('Export Logs','wptuts-log'), 'manage_options', 'wptuts-export', array(__CLASS__,'display') ); } </pre><div class="contentsignin">登入後複製</div></div> <p>這裡的 <code>$hook_suffix</code> 是用於各種螢幕特定鉤子的後綴,這裡討論。我們在這裡不使用它 - 但如果您使用它,最好將其值儲存在變數中,而不是對其進行硬編碼。 </p> <p>在上面我們將方法 <code>display()</code> 設定為我們頁面的回調,接下來我們定義它:</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>static function display(){ echo '&lt;div class=&quot;wrap&quot;&gt;'; screen_icon(); echo '&lt;h2 id=&quot;Export-Activity-Logs-wptuts-log&quot;&gt;' . __( 'Export Activity Logs', 'wptuts-log' ) . '&lt;/h2&gt;'; ?&gt; &lt;form id=&quot;wptuts-export-log-form&quot; method=&quot;post&quot; action=&quot;&quot;&gt; &lt;p&gt; &lt;label&gt;&lt;?php _e( 'Click to export the activity logs','wptuts-log' ); ?&gt;&lt;/label&gt; &lt;input type=&quot;hidden&quot; name=&quot;action&quot; value=&quot;export-logs&quot; /&gt; &lt;/p&gt; &lt;?php wp_nonce_field('wptuts-export-logs','_wplnonce') ;?&gt; &lt;?php submit_button( __('Download Activity Logs','wptuts-log'), 'button' ); ?&gt; &lt;/form&gt; &lt;?php } </pre><div class="contentsignin">登入後複製</div></div> <p>最後,我們希望監聽上述表單何時提交並觸發匯出檔案下載。 </p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>static function maybe_download(){ /* Listen for form submission */ if( empty($_POST['action']) || 'export-logs' !== $_POST['action'] ) return; /* Check permissions and nonces */ if( !current_user_can('manage_options') ) wp_die(''); check_admin_referer( 'wptuts-export-logs','_wplnonce'); /* Trigger download */ wptuts_export_logs(); } </pre><div class="contentsignin">登入後複製</div></div> <p>剩下的就是建立函數 <code>wptuts_export_logs()</code> 來建立並傳回我們的 .xml 檔案。 </p> <hr> <h2 id="建立匯出檔案">建立匯出檔案</h2> <p>我們希望函數做的第一件事是檢索日誌。如果有的話,我們需要設定適當的標頭並以 XML 格式列印它們。由於我們希望使用者下載 XML 文件,因此我們將 Content-Type 設定為 <code>text/xml</code>,將 Content-Description 設定為 <code>File Transfer</code>。我們還將為下載檔案產生合適的名稱。最後,我們將添加一些註釋 - 這些完全是可選的,但有助於指導用戶如何處理下載的檔案。 </p> <p>由於在本系列的前一部分中,我們為表格建立了API,因此我們的匯出處理程序不需要直接接觸資料庫- 也不需要清理<code>$args</code> 數組,因為這是由<code> 處理的wptuts_get_logs()</code>。 </p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>function wptuts_export_logs( $args = array() ) { /* Query logs */ $logs = wptuts_get_logs($args); /* If there are no logs - abort */ if( !$logs ) return false; /* Create a file name */ $sitename = sanitize_key( get_bloginfo( 'name' ) ); if ( ! empty($sitename) ) $sitename .= '.'; $filename = $sitename . 'wptuts-logs.' . date( 'Y-m-d' ) . '.xml'; /* Print header */ header( 'Content-Description: File Transfer' ); header( 'Content-Disposition: attachment; filename=' . $filename ); header( 'Content-Type: text/xml; charset=' . get_option( 'blog_charset' ), true ); /* Print comments */ echo &quot;&lt;!-- This is a export of the wptuts log table --&gt;\n&quot;; echo &quot;&lt;!-- (Demonstration purposes only) --&gt;\n&quot;; echo &quot;&lt;!-- (Optional) Included import steps here... --&gt;\n&quot;; /* Print the logs */ } </pre><div class="contentsignin">登入後複製</div></div> <p>您会注意到,我们已将实际查询数组作为参数传递给 <code>wptuts_export_logs()</code> 函数。我们可以对此进行硬编码,但不这样做也是有道理的。虽然这里的目的只是导出表中的<em>所有内容</em>,但将查询作为参数传递允许我们稍后添加在特定时间范围内或针对特定用户导出日志的选项。</ p> <p>创建 XML 文件时,我们需要确保标签之间打印的值不包含字符 <code>&</code>、<code><</code> 或 <code>></code>。为了确保这一点,对于 ID,我们使用 <code>absint</code> 清理数据,并使用 <code>sanitize_key</code> 清理对象类型和活动(因为我们希望这些仅包含小写字母数字、下划线和连字符)。</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>/* Print logs to file */ echo '&lt;logs&gt;'; foreach ( $logs as $log ) { ?&gt; &lt;item&gt; &lt;log_id&gt;&lt;?php echo absint($log-&gt;log_id); ?&gt;&lt;/log_id&gt; &lt;activity_date&gt;&lt;?php echo mysql2date( 'Y-m-d H:i:s', $log-&gt;activity_date, false ); ?&gt;&lt;/activity_date&gt; &lt;user_id&gt;&lt;?php echo absint($log-&gt;user_id); ?&gt;&lt;/user_id&gt; &lt;object_id&gt;&lt;?php echo absint($log-&gt;object_id); ?&gt;&lt;/object_id&gt; &lt;object_type&gt;&lt;?php echo sanitize_key($log-&gt;object_type); ?&gt;&lt;/object_type&gt; &lt;activity&gt;&lt;?php echo sanitize_key($log-&gt;activity); ?&gt;&lt;/activity&gt; &lt;/item&gt; &lt;?php } echo '&lt;/logs&gt;'; </pre><div class="contentsignin">登入後複製</div></div> <p>更一般地,您可以使用以下函数将要打印的值包装在 <code>CDATA</code> 标记内来清理它们:</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>/** * Wraps the passed string in a XML CDATA tag. * * @param string $string String to wrap in a XML CDATA tag. * @return string */ function wptuts_wrap_cdata( $string ) { if ( seems_utf8( $string ) == false ) $string = utf8_encode( $string ); return '&lt;![CDATA[' . str_replace( ']]&gt;', ']]]]&gt;&lt;![CDATA[&gt;', $string ) . ']]&gt;'; } </pre><div class="contentsignin">登入後複製</div></div> <p>最后我们 <code>exit()</code> 以防止任何进一步的处理:</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'> /* Finished - now exit */ exit(); </pre><div class="contentsignin">登入後複製</div></div> <p>导航到我们的导出页面,单击“下载活动日志”应提示下载 XML 文件。</p> <hr> <h2 id="摘要">摘要</h2> <p>在本教程中,我们研究了从自定义表中导出数据。不幸的是,当数据引用本机 WordPress 表时,这充其量是有问题的。上述方法仅适用于数据无法做到这一点的情况。使用的示例(我们的活动日志)显然不属于此类,只是为了与本系列的其余部分保持一致而使用。</p> <p>当数据<em>确实</em>引用本机表时,显然有必要将其与本机表一起导入,并在此过程中跟踪导入期间发生的 ID 任何更改。目前,现有的导入和导出处理程序无法实现这一点,因此唯一可行的选择是创建自己的处理程序。在自定义数据仅引用单个帖子类型的简单情况下,可以设计导入和导出处理程序来处理该帖子类型以及自定义数据,并通知用户不要使用该帖子类型的本机导出器。 </p> <p>在本系列的下一部分中,我们将为导出的 .xml 文件创建一个简单的导入处理程序。</p>

以上是資料匯出:自訂資料庫表的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

ECharts與Java介面:如何實作統計圖表資料匯出與分享 ECharts與Java介面:如何實作統計圖表資料匯出與分享 Dec 17, 2023 am 08:44 AM

ECharts是一款功能強大、靈活可自訂的開源圖表庫,可用於資料視覺化和大螢幕展示。在大數據時代,統計圖表的資料匯出和分享功能變得越來越重要。本文將介紹如何透過Java介面實現ECharts的統計圖表資料匯出和分享功能,並提供具體的程式碼範例。一、ECharts簡介ECharts是百度開源的一款基於JavaScript和Canvas的資料視覺化函式庫,具有豐富的圖表

如何利用vue和Element-plus實作資料的匯出和列印功能 如何利用vue和Element-plus實作資料的匯出和列印功能 Jul 18, 2023 am 09:13 AM

如何利用Vue和ElementPlus實現資料的匯出和列印功能近年來,隨著前端開發的快速發展,越來越多的網頁應用程式需要提供資料匯出和列印功能,以滿足使用者對資料的多樣化使用需求。 Vue作為一種流行的JavaScript框架,配合ElementPlus元件庫的使用,可以輕鬆實現資料的匯出和列印功能。本文將介紹一種基於Vue和ElementPlus的資料匯出和

PHP表單處理:表單資料匯出與列印 PHP表單處理:表單資料匯出與列印 Aug 09, 2023 pm 03:48 PM

PHP表單處理:表單資料匯出與列印在網站開發中,表單是不可或缺的一部分。當網站上的表單被使用者填寫並提交後,開發者需要對這些表單資料進行處理。本文將介紹如何使用PHP處理表單數據,並示範如何將數據匯出為Excel檔案和列印出來。一、表單提交與基本處理首先,需要建立一個HTML表單,供使用者填寫並提交資料。假設我們有一個簡單的回饋表單,包含姓名、信箱和評論。 HTM

如何使用 PHP 實作資料匯入和匯出 Excel 功能 如何使用 PHP 實作資料匯入和匯出 Excel 功能 Sep 06, 2023 am 10:06 AM

如何使用PHP實作資料匯入和匯出Excel功能匯入和匯出Excel檔案是Web開發中常見的需求之一,透過使用PHP語言,我們可以輕鬆實現此功能。在本文中,我們將介紹如何使用PHP和PHPExcel函式庫來實現資料匯入和匯出Excel檔案的功能。首先,我們要安裝PHPExcel函式庫。你可以從官方網站(https://github.com/PHPOffice/P

如何使用Vue和Element-UI實作資料的匯入和匯出功能 如何使用Vue和Element-UI實作資料的匯入和匯出功能 Jul 22, 2023 pm 01:25 PM

如何使用Vue和Element-UI實現資料的匯入和匯出功能近年來,隨著Web應用程式的發展,資料的匯入和匯出功能在許多專案中變得越來越重要。提供使用者方便的資料匯入和匯出功能,不僅可以提高使用者體驗,還能提升系統的整體效率。本文將介紹如何使用Vue和Element-UI實作資料的匯入和匯出功能,並附上對應的程式碼範例。一、準備工作首先,我們需要在專案中引進Vu

Vue和Excel完美結合:如何實現資料的批次匯出 Vue和Excel完美結合:如何實現資料的批次匯出 Jul 21, 2023 pm 12:13 PM

Vue和Excel完美結合:如何實現資料的批次匯出在許多前端開發中,匯出資料到Excel是一個常見的需求。而Vue作為一款流行的JavaScript框架,提供了許多方便的工具和方法來實現這個功能。本文將介紹如何利用Vue和Excel.js庫,實現資料的批次匯出功能。首先,我們要安裝Excel.js函式庫。可以使用npm套件管理器進行安裝:npminstall

Golang實戰:資料匯出功能的實作技巧分享 Golang實戰:資料匯出功能的實作技巧分享 Feb 29, 2024 am 09:00 AM

資料匯出功能在實際開發中是非常常見的需求,特別是在後台管理系統或資料報表匯出等場景。本文將以Golang語言為例,分享資料導出功能的實作技巧,並給出具體的程式碼範例。 1.環境準備在開始之前,確保已經安裝好Golang環境,並且熟悉Golang的基本語法和操作。另外,為了實現資料匯出功能,可能還需要使用第三方函式庫,例如github.com/360EntSec

利用Golang實現資料導出功能詳解 利用Golang實現資料導出功能詳解 Feb 28, 2024 pm 01:42 PM

標題:利用Golang實現資料匯出功能詳解隨著資訊化程度的提升,許多企業和組織需要將儲存在資料庫中的資料匯出到不同的格式中,以便進行資料分析、報表產生等用途。本文將介紹如何利用Golang程式語言實作資料匯出功能,包括連接資料庫、查詢資料和匯出資料到檔案的詳細步驟,並提供具體的程式碼範例。連接資料庫首先,我們需要使用Golang中提供的資料庫驅動程序,例如da

See all articles