SOY Shopプラグインの解説 注文個別の納品書やCSVを出力する
2014.02.24
印刷用の納品書であったり他システムと連携するためのCSVの出力用にsoyshop.order.function.phpやsoyshop.order.export.phpといった拡張ポイントが用意されています。
今回はそのうちのsoyshop.order.function.phpについての説明を記載します。
今回は1.13.5に同梱予定の印刷用納品書作成プラグイン バージョン1.2をベースで話を進めます。
(プラグインID : order_invoice)
構造は下記のようになっています。
soyshop.config.phpとsoyshop.info.phpの拡張ポイントは省略します。
今回の本題のsoyshop.order.function.phpとsoyshop.order.export.phpですが、
どちらも注文の納品書やCSVファイルを出力するポイントになっています。
functionとexportの違いは、
functionが個々の注文詳細の右下にボタンを追加するもので、
exportが注文一覧の検索結果をエクスポートするにボタンを追加するものです。
/soyshop/webapp/src/logic/plugin/extensions/soyshop.order.function.php
を見てみると
class SOYShopOrderFunction implements SOY2PluginAction{ private $orderId; /** * title text */ function getTitle(){} /** * @return html */ function getPage(){} function getOrderId() { return $this->orderId; } function setOrderId($orderId) { $this->orderId = $orderId; } }
getTitleとgetPage関数が用意されています。
getTitle関数は
ボタン表示の際の表記に関わっており、
getPageはreturnでHTMLを返すことで、
上記のような納品書を出力させたり、
header("Cache-Control: public"); header("Pragma: public"); header("Content-Disposition: attachment; filename=ehiden_" . $orderId.".csv"); header("Content-Type: text/csv; charset=" . htmlspecialchars($charset) . ";"); echo mb_convert_encoding(implode("," , $labels,$charset,"UTF-8"); echo "\r\n"; echo $line; exit; //csv output
(ehiden_order_csvより)
関数内でheaderを指定することで、CSVファイルの発行を行うことができます。
印刷用納品書作成プラグインのgetPage内は
function getPage(){ SOY2::import("module.plugins.order_invoice.common.OrderINvoiceCommon"); $template = OrderINvoiceCommon::getTemplateName(); $html = file_get_contents(dirname(__FILE__) . "/template/" . $template . ".html"); SOY2DAOFactory::create("order.SOYShop_ItemModule"); SOY2DAOFactory::create("config.SOYShop_ShopConfig"); include_once(dirname(__FILE__) . "/page/InvoicePage.class.php"); $page = SOY2HTMLFactory::createInstance("InvoicePage", array( "arguments" => array("main_invoice", $html), "orderId" => $this->getOrderId() )); $page->setTitle("納品書"); //metaのtitleタグに入れる値 $page->build_invoice(); //InvoicePageで用意した関数 ob_start(); $page->display(); $html = ob_get_contents(); ob_end_clean(); return $html; }
その後にSOY2HTMLFactory::createInstanceでHTMLTemplatePageクラスを継承したページクラスを読み込んで、
あらかじめincludeしておいたHTMLファイルにsoy:idを追加していく。
という処理をしています。