SOY Shopプラグインの解説 注文個別の納品書やCSVを出力する
印刷用の納品書であったり他システムと連携するための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を追加していく。
という処理をしています。