目次
フォーマットを決定する
値上げ
摘要
ホームページ バックエンド開発 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>このシリーズの最初の記事で述べたように、カスタム データベース テーブルの主な問題の 1 つは、既存のインポートおよびエクスポート ハンドラーでは処理されないことです。この記事はこの問題に対処することを目的としていますが、現時点では完全に満足のいく解決策がないことに注意してください。 </p> <p> 2 つの状況を考えてみましょう: </p> <ol> <li>カスタムテーブルはネイティブWordPressテーブルを参照します</li> <li>カスタム テーブルはネイティブ テーブルから完全に独立しています</li> </ol> <p>「最悪のシナリオ」は最初のシナリオです。例として、ユーザーアクティビティログを保存するカスタムテーブルを考えてみましょう。ユーザー ID、オブジェクト ID、オブジェクト タイプを参照します。これらはすべて、ネイティブ WordPress テーブルに保存されているデータを参照します。ここで、誰かが WordPress Web サイトからすべてのデータを 2 番目の Web サイトにインポートしたいと考えていると想像してください。たとえば、投稿をインポートするときに、その ID を持つ投稿がすでに 2 番目のサイトに存在する可能性があるため、WordPress が新しい ID を割り当てる必要がある可能性は十分にあります。 </p> <p>この場合、そのような変更を追跡し、テーブル内で参照される ID を更新する必要があります。これ自体はそれほど難しいことではありません。 <em>残念ながら</em>、他のWordPressサイトからのデータのインポートを処理するためのWordPress Importerプラグインには、これを実現するために必要なフックがありません。このコメントで示唆されているように、潜在的な回避策は、データをメタデータにも保存することです。残念ながら、これによりデータが重複し、データベースの正規化に違反します。一般的には良いアイデアではありません。結局のところ、実際に実現できるのはいくつかのユースケースのみです。 </p> <p>2 番目のケースでは、この複雑さは回避されますが、それでもカスタムのインポートおよびエクスポート ハンドラーが必要です。この状況については、次の 2 つの記事で説明します。ただし、このシリーズの残りの部分との一貫性を保つために、これはケース (1) の例ではありますが、アクティビティ ログ テーブルをそのまま使用します。 </p> <hr> <h2 id="フォーマットを決定する">フォーマットを決定する</h2> <p>まず、エクスポートするファイルの形式を決定する必要があります。最適な形式は、データの性質 (または「構造」) とその使用方法によって異なります。私の意見では、XML は 1 対多の関係を処理できるため、一般に優れています。ただし、データが表形式の場合、特にスプレッドシート アプリケーションとの統合が容易なため、CSV の方が好ましい場合があります。この例では XML を使用します。 </p> <hr> <h2 id="値上げ">値上げ</h2> <p>次のステップは、ユーザーがログ テーブルからデータをエクスポートできるようにする管理ページを作成することです。 「ツール」メニュー項目の下にページを追加するクラスを作成します。このページには、ユーザーにエクスポート ファイルのダウンロードを促すボタンのみが含まれています。このクラスは、フォームの送信をリッスンし、ファイルのダウンロードをトリガーするハンドラーも追加します。 </p> <p>まずクラスの構造を見て、次にそのメソッドの詳細を埋めていきます。 </p> リーリー <p><code>WPTuts_Log_Export_Admin_Page::load()</code> クラスを初期化し、コールバックを適切な操作にフックします: </p> <ul> <li> <code>add_submenu</code> – 「ツール」メニューにページを追加するメソッド。 </li> <li> <code>maybe_download</code> – このメソッドは、ダウンロード要求が送信されたかどうかをリッスンして確認します。これにより、権限と nonce もチェックされます。 </li> </ul> <p> これらのヘッダーは自分で設定するため、ヘッダーが送信される前にエクスポート リスナーを呼び出す必要があります。これを <code>init</code> にフックすることもできますが、管理ではエクスポート ファイルのダウンロードのみを許可しているため、ここでは <code>admin_init</code> の方が適切です。 </p> <p>メニューにページを追加するのは簡単です。 「ツール」の下にページを追加するには、<code>add_management_page()</code> を呼び出すだけです。 </p> リーリー <p>ここで <code>$hook_suffix</code> は、ここで説明するさまざまな画面固有のフックに使用されるサフィックスです。ここでは使用しませんが、使用する場合は、その値をハードコーディングするよりも変数に格納することをお勧めします。 </p> <p> 上記では、メソッド <code>display()</code> をページのコールバックとして設定し、それを定義します。 リーリー </p>最後に、上記のフォームがいつ送信されるかを監視し、エクスポート ファイルのダウンロードをトリガーしたいと考えています。 <p> リーリー </p>残っているのは、.xml ファイルを作成して返す関数 <p>wptuts_export_logs()<code> を作成することだけです。 </code> </p> <hr>エクスポートファイルの作成<h2> </h2>関数で最初に行うことは、ログを取得することです。存在する場合は、適切なヘッダーを設定し、XML 形式で出力する必要があります。ユーザーに XML ファイルをダウンロードしてもらいたいため、Content-Type を <p>text/xml<code> に設定し、Content-Description を </code>File Transfer<code> に設定します。ダウンロードしたファイルに適切な名前も生成します。最後に、いくつかのコメントを追加します。これらは完全にオプションですが、ダウンロードしたファイルをどう処理するかをユーザーに案内するのに役立ちます。 </code> </p> このシリーズの前の部分でテーブルの API を作成したため、エクスポート ハンドラーはデータベースに直接アクセスする必要はありません。また、<p>$args<code> 配列をクリーンアップする必要もありません。これは </code> によって行われ、wptuts_get_logs()<code> によって処理されます。 </code> <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> <p>导航到我们的导出页面,单击“下载活动日志”应提示下载 XML 文件。</p> <hr> <h2 id="摘要">摘要</h2> <p>在本教程中,我们研究了从自定义表中导出数据。不幸的是,当数据引用本机 WordPress 表时,这充其量是有问题的。上述方法仅适用于数据无法做到这一点的情况。使用的示例(我们的活动日志)显然不属于此类,只是为了与本系列的其余部分保持一致而使用。</p> <p>当数据<em>确实</em>引用本机表时,显然有必要将其与本机表一起导入,并在此过程中跟踪导入期间发生的 ID 任何更改。目前,现有的导入和导出处理程序无法实现这一点,因此唯一可行的选择是创建自己的处理程序。在自定义数据仅引用单个帖子类型的简单情况下,可以设计导入和导出处理程序来处理该帖子类型以及自定义数据,并通知用户不要使用该帖子类型的本机导出器。 </p> <p>在本系列的下一部分中,我们将为导出的 .xml 文件创建一个简单的导入处理程序。</p>

以上がデータ エクスポート: カスタマイズされたデータベース テーブルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ECharts と Java インターフェイス: 統計グラフ データをエクスポートして共有する方法 ECharts と Java インターフェイス: 統計グラフ データをエクスポートして共有する方法 Dec 17, 2023 am 08:44 AM

ECharts は、データの視覚化や大画面表示に使用できる、強力かつ柔軟でカスタマイズ可能なオープン ソース チャート ライブラリです。ビッグデータ時代において、統計グラフのデータエクスポートや共有機能はますます重要になっています。この記事では、ECharts の統計グラフ データのエクスポートおよび共有機能を Java インターフェイスを介して実装する方法と、具体的なコード例を紹介します。 1. ECharts の概要 ECharts は、Baidu がオープンソース化した JavaScript と Canvas をベースにした、豊富なグラフを備えたデータ視覚化ライブラリです。

vue と Element-plus を使用してデータをエクスポートおよび印刷する方法 vue と Element-plus を使用してデータをエクスポートおよび印刷する方法 Jul 18, 2023 am 09:13 AM

VueとElementPlusを使ってデータエクスポート・印刷機能を実装する方法 近年、フロントエンド開発の急速な発展に伴い、ユーザーの多様なデータ活用ニーズに応えるため、Webアプリケーションにデータエクスポート・印刷機能を提供するケースが増えています。 。人気の JavaScript フレームワークである Vue を ElementPlus コンポーネント ライブラリと併用すると、データ エクスポートおよび印刷機能を簡単に実装できます。この記事では、データのエクスポートと

PHP を使用して Excel のデータのインポートおよびエクスポート機能を実装する方法 PHP を使用して Excel のデータのインポートおよびエクスポート機能を実装する方法 Sep 06, 2023 am 10:06 AM

PHP を使用して Excel 関数のデータのインポートとエクスポートを実装する方法 Excel ファイルのインポートとエクスポートは、Web 開発における一般的なニーズの 1 つです。PHP 言語を使用すると、この関数を簡単に実装できます。この記事では、PHP と PHPExcel ライブラリを使用して、Excel ファイルにデータのインポートおよびエクスポート機能を実装する方法を紹介します。まず、PHPExcel ライブラリをインストールする必要があります。公式サイト(https://github.com/PHPOffice/P)からダウンロードできます。

PHP フォーム処理: フォーム データのエクスポートと印刷 PHP フォーム処理: フォーム データのエクスポートと印刷 Aug 09, 2023 pm 03:48 PM

PHP フォーム処理: フォーム データのエクスポートと印刷 Web サイト開発において、フォームは不可欠な部分です。ユーザーが Web サイト上のフォームに記入して送信すると、開発者はフォーム データを処理する必要があります。この記事では、PHP を使用してフォーム データを処理する方法を紹介し、データを Excel ファイルにエクスポートして印刷する方法を示します。 1. フォームの送信と基本処理 まず、ユーザーがデータを入力して送信するための HTML フォームを作成する必要があります。名前、電子メール、コメントを含む簡単なフィードバック フォームがあるとします。 HTM

Vue と Element-UI を使用してデータのインポートおよびエクスポート機能を実装する方法 Vue と Element-UI を使用してデータのインポートおよびエクスポート機能を実装する方法 Jul 22, 2023 pm 01:25 PM

Vue と Element-UI を使用してデータのインポートおよびエクスポート機能を実装する方法 近年、Web アプリケーションの開発に伴い、多くのプロジェクトでデータのインポートおよびエクスポート機能の重要性が高まっています。便利なデータのインポートおよびエクスポート機能をユーザーに提供すると、ユーザー エクスペリエンスが向上するだけでなく、システム全体の効率も向上します。この記事では、Vue と Element-UI を使用してデータのインポートおよびエクスポート機能を実装する方法を紹介し、対応するコード例を添付します。 1. 準備作業 まず、プロジェクトに Vu を導入する必要があります

Vue と Excel の完璧な組み合わせ: データをバッチでエクスポートする方法 Vue と Excel の完璧な組み合わせ: データをバッチでエクスポートする方法 Jul 21, 2023 pm 12:13 PM

Vue と Excel の完璧な組み合わせ: データのバッチ エクスポートを実装する方法 多くのフロントエンド開発では、データを Excel にエクスポートすることが一般的な要件です。人気のある JavaScript フレームワークとして、Vue はこの機能を実現するための便利なツールとメソッドを多数提供しています。この記事では、VueとExcel.jsのライブラリを使ってデータの一括エクスポート機能を実装する方法を紹介します。まず、Excel.js ライブラリをインストールする必要があります。 npm パッケージ マネージャーを使用してインストールできます: npminstall

Golangを利用したデータエクスポート機能の実装について詳しく解説 Golangを利用したデータエクスポート機能の実装について詳しく解説 Feb 28, 2024 pm 01:42 PM

タイトル: Golang を使用したデータエクスポート機能の詳細説明 情報化の進展に伴い、多くの企業や組織は、データ分析やレポート作成などの目的で、データベースに保存されているデータをさまざまな形式でエクスポートする必要があります。この記事では、Golang プログラミング言語を使用してデータ エクスポート機能を実装する方法を紹介します。これには、データベースへの接続、データのクエリ、データのファイルへのエクスポートの詳細な手順が含まれ、具体的なコード例も示されます。最初にデータベースに接続するには、Golang で提供されるデータベース ドライバー (da など) を使用する必要があります。

パーソナライズされた Discuz ナビゲーション バーにより、フォーラムがさらにユニークになります。 パーソナライズされた Discuz ナビゲーション バーにより、フォーラムがさらにユニークになります。 Mar 11, 2024 pm 01:45 PM

Discuz フォーラムでは、ナビゲーション バーはユーザーが Web サイトにアクセスする際に頻繁に接触する部分の 1 つであるため、ナビゲーション バーをカスタマイズすることで、フォーラムに独自のパーソナライズされたスタイルを追加し、ユーザー エクスペリエンスを向上させることができます。次に、Discuz フォーラムのナビゲーション バーをパーソナライズする方法を紹介し、具体的なコード例を示します。まず、Discuz のバックエンド管理システムにログインし、「インターフェース」→「ナビゲーション設定」ページに入る必要があります。このページでは、ナビゲーション バーのさまざまな設定やカスタマイズを実行できます。ここにあるいくつかの

See all articles