NPカード用のプラグインが用意されてないため、取りあえず一時的データベースにカード情報等を保存するためのカスタマイズをしました。
カード情報等はあれなもんで、都度手動で削除するという運用です。
2024年10月12日(土) 02:00 JST
自分用備忘録です
オープンソースCMSのGeeklog及び
オープンソースECサイト構築システムZen CartおよびEC-CUBEの自分用備忘録です。
自分用備忘録ですので、コピペして動作できない等の苦情は勘弁して下さい。
Zen Cartについては、1.3.8a UTF-8 版をベースにしています。EC-CUBEは2.12.2をベースにしています。
配送業者別及び商品種別(mtb_product_type)に 送料無料条件設定
支払モジュールでどの配送モジュールを適用させるかリストから選択させる場合
includes/modules/payment/***.php 58行目付近
// disable the module if the order only contains virtual products if ($this->enabled == true) { if ($order->content_type != 'physical') { $this->enabled = false; } } // 下記を追記 if (MODULE_PAYMENT_***_PAYTO == '' && $this->enabled == true) { $this->enabled = false; } if ($this->enabled == true) { $this->enabled = false; $shipping_modules = explode(', ', MODULE_PAYMENT_***_PAYTO); list($session_shipping) = explode('_', $_SESSION['shipping']['id']); // if (array_search($session_shipping, $shipping_modules)) $this->enabled = true; if (is_int(array_search($session_shipping, $shipping_modules))) $this->enabled = true; } //手数料の表示 if ($this->enabled == true && (int)MODULE_PAYMENT_***_COST > 0 && MODULE_ORDER_TOTAL_***_STATUS != 'true') { $this->enabled = false; } } function install() { global $db; $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('配送モジュール:', 'MODULE_PAYMENT_***_PAYTO', '', '***を有効にする配送モジュールを選んで下さい。', '6', '1', 'zen_cfg_select_payment(', now());"); function keys() { return array('MODULE_PAYMENT_***_PAYTO'追記); } //管理画面に配送モジュールを表示させるため下記を追記 function cc_string_format ($type ,$str) { if (strlen($str) < 1) return false; $str = @preg_replace('/("|,)/' ,'' ,$str); $moji_count = 0; $moji_code = 'utf-8'; switch ($type) { case 'company': $moji_count = 30; break; case 'name': $moji_count = 15; break; case 'name_kana': $moji_count = 25; $str = mb_convert_kana($str, "KVC" ,$moji_code); break; case 'postcode': $moji_count = 7; $str = mb_convert_kana($str, "a" ,$moji_code); $str = @preg_replace('/[^0-9]/' ,'' ,$str); break; case 'address': $str = mb_convert_kana($str, "n" ,$moji_code); $str = str_replace('ー', "-" ,$str); $moji_count = 100; break; case 'telephone': $str = mb_convert_kana($str, "a" ,$moji_code); $str = preg_replace('/[^0-9]/' ,'' ,$str); if (@preg_match('/^0(5|7|9)0/' ,$str)) { $moji_count = 11; } else { $moji_count = 10; } break; case 'email_address': $moji_count = 100; break; case 'product_name': $moji_count = 150; break; default: break; } $str = mb_substr($str ,0 ,$moji_count ,$moji_code); return $str; } } if (!function_exists('zen_cfg_select_payment')) { function zen_cfg_select_payment($key_value, $key = '') { $key_value = explode(", " ,$key_value); $string = ''; $file_extension = '.php'; $module_directory = DIR_FS_CATALOG_MODULES . 'shipping/'; $directory_array = array(); if ($dir = @dir($module_directory)) { while ($file = $dir->read()) { if (!is_dir($module_directory . $file)) { if (substr($file, strrpos($file, '.')) == $file_extension) { $directory_array[] = $file; } } } sort($directory_array); $dir->close(); } for ($i=0, $n=sizeof($directory_array); $i<$n; $i++) { $file = $directory_array[$i]; include_once(DIR_FS_CATALOG_LANGUAGES . $_SESSION['language'] . '/modules/shipping/' . $file); include_once($module_directory . $file); $class = substr($file, 0, strrpos($file, '.')); if (zen_class_exists($class)) { $module = new $class; if ($module->check() > 0) { if ($module->sort_order > 0) { if ($installed_modules[$module->sort_order] != '') { $zc_valid = false; } $installed_modules[$module->sort_order] = $file; } else { $installed_modules[] = $file; } } } $name = ((zen_not_null($key)) ? 'configuration[' . $key . '][]' : 'configuration_value'); $string .= '<br><input type="checkbox" name="' . zen_output_string($name) . '"'; if (zen_not_null($module->code)) $string .= ' value="' . zen_output_string($module->code) . '"'; if (is_int(array_search($module->code,$key_value))) $string .= ' CHECKED'; $string .= '>' .zen_output_string($module->title); } return $string; }
特定商品を特定支払にする場合
※この場合特定の配送方法を特定の支払方法にすることで対応
例えばゆうパックの代引きの場合
includes/modules/payment/cod.php(代金引換モジュールを複製変更)65行目以降を下記に変更
if ($this->enabled == true) { if ($order->content_type != 'physical') { $this->enabled = false; } if ($_SESSION['shipping']['id'] != 'yuupack_yuupack') { $this->enabled = false; } } }
上記は配送モジュールでゆうパックの場合適用する場合
特定商品を特定配送にする場合(メーカー直送等の場合)
特定商品を特定配送にする場合(メーカー直送等の場合)
includes/modules/shipping/maker.phpを作成(配送モジュールを複製変更)
makerでクラス・コードを定義57行目に下記を追加
if($restrict->fields['master_categories_id'] == '1'){ $this->enabled = false; }
上記場合はマスターカテゴリの1をメーカー直送から排除
メーカー直送を適用したくないカテゴリーidを追加していく
if($restrict->fields['master_categories_id'] == '1'){ $this->enabled = false; } if($restrict->fields['master_categories_id'] == '2'){ $this->enabled = false; }
サイドボックスの追加方法
サイドボックスの追加方法
モジュール
includes/modules/sideboxes/sample_sb.phpを作成(他のページを複製内容を変更)
$title = BOX_HEADING_SAMPLE_SIDEBOX; $title_link = "sample_page"; //(1)テンプレートを使わない場合 //$content = '<div id="samplesbContent" class="sideBoxContent">サイドボックスのサンプルです</div>'; //(2)テンプレートを使う場合 require($template->get_template_dir('tpl_sample_sb_sidebox.php', DIR_WS_TEMPLATE, $current_page_base, 'sideboxes') . '/tpl_sample_sb_sidebox.php'); require($template->get_template_dir($column_box_default, DIR_WS_TEMPLATE, $current_page_base, 'common') . '/' . $column_box_default); ?>
言語パック
includes/languages/japanese/extra_definitions/sample_sb.phpを作成(他のページを複製内容を変更)
<?php /** * LIST:5-11 * @copyright Copyright 2003-2006 Zen Cart Development Team * @copyright Portions Copyright 2003 osCommerce * @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0 */ define('BOX_HEADING_SAMPLE_SIDEBOX', 'サンプル'); ?>
テンプレート
includes/templates/template_default/sideboxes/tpl_sample_sb_sidebox.phpを作成(他のページを複製内容を変更)
<?php /** * LIST:5-13, LIST:6-2 * @copyright Copyright 2003-2006 Zen Cart Development Team * @copyright Portions Copyright 2003 osCommerce * @license http://www.zen-cart.com/license/2_0.txt GNU Public License V2.0 */ $content = ''; $content .= '<div id="' . str_replace('_', '-', $box_id . 'Content') . '" class="sideBoxContent">'; $content .= 'サイドボックスのサンプルです<br />'; if(CONFIG_SAMPLE_1 == 'true') { $content .= CONFIG_SAMPLE_2; } $content .= '</div>'; ?>
以上で追加できる
※現在はEZ-Pagesがあるのでそこからページを増加したほうが
定番ページの増加作成方法
定番ページの増加作成方法
includes/modules/pages/sample_page/
にheader_php.phpを作成(他のページを複製OK)定数をFILENAME_DEFINE_SAMPLE_PAGEに
言語パック
includes/languages/japanese/sample_page.phpを作成(他のページを複製内容を変更)
ページファイル名の定義
includes/extra_datafiles/sample_page.phpを作成(他のページを複製内容を変更)
ページコンテンツの作成
includes/languages/japanese/html_includes/define_sample_page.phpを作成(他のページを複製内容を変更)
テンプレート
includes/templates/template_default/templates/tpl_sample_page_default.phpを作成(他のページを複製内容を変更)
下記SQLを実行
insert into configuration (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, last_modified, date_added, use_function, set_function) values ('Define Page 5', 'DEFINE_SAMPLE_PAGE_STATUS', '1', 'Enable the Defined sample Page text?<br />0= OFF<br />1= ON', '25', '85', now(), now(), NULL, 'zen_cfg_select_option(array(\'0\', \'1\'),'); UPDATE configuration SET configuration_title = '自由編集ページ(Define Page) sample page', configuration_description = '自由編集ページ(Define Page) sample pageを表示しますか?<br />\r\n・0= OFF<br />\r\n・1= ON' WHERE configuration_key = 'DEFINE_SAMPLE_PAGE_STATUS';
※現在はEZ-Pagesがあるのでそこからページを増加したほうが
代引手数料をゆうパックや送料無料商品で適応させる
代引手数料をゆうパックや送料無料商品で適応させるには、
配送モジュール ゆうパック(yuupack)、送料無料商品(wfree)で作成した場合
/includes/order_total/ot_cod_fee.php 49行目から
if ($_SESSION['payment'] == 'cod' || $_SESSION['payment'] == 'freeshippercod' || $_SESSION['payment'] == 'wfreecod') { //process installed shipping modules if (substr_count($_SESSION['shipping']['id'], 'flat') !=0) $cod_zones = split("[:,]", MODULE_ORDER_TOTAL_COD_FEE_FLAT); if (substr_count($_SESSION['shipping']['id'], 'free') !=0) $cod_zones = split("[:,]", MODULE_ORDER_TOTAL_COD_FEE_FREE); if (substr_count($_SESSION['shipping']['id'], 'freeshipper') !=0) $cod_zones = split("[:,]", MODULE_ORDER_TOTAL_COD_FEE_FREESHIPPER); if (substr_count($_SESSION['shipping']['id'], 'freeoptions') !=0) $cod_zones = split("[:,]", MODULE_ORDER_TOTAL_COD_FEE_FREEOPTIONS); if (substr_count($_SESSION['shipping']['id'], 'item') !=0) $cod_zones = split("[:,]", MODULE_ORDER_TOTAL_COD_FEE_ITEM); if (substr_count($_SESSION['shipping']['id'], 'perweightunit') !=0) $cod_zones = split("[:,]", MODULE_ORDER_TOTAL_COD_FEE_PERWEIGHTUNIT); if (substr_count($_SESSION['shipping']['id'], 'table') !=0) $cod_zones = split("[:,]", MODULE_ORDER_TOTAL_COD_FEE_TABLE); if (substr_count($_SESSION['shipping']['id'], 'ups') !=0) $cod_zones = split("[:,]", MODULE_ORDER_TOTAL_COD_FEE_UPS); if (substr_count($_SESSION['shipping']['id'], 'usps') !=0) $cod_zones = split("[:,]", MODULE_ORDER_TOTAL_COD_FEE_USPS); if (substr_count($_SESSION['shipping']['id'], 'fedex') !=0) $cod_zones = split("[:,]", MODULE_ORDER_TOTAL_COD_FEE_FEDEX); if (substr_count($_SESSION['shipping']['id'], 'zones') !=0) $cod_zones = split("[:,]", MODULE_ORDER_TOTAL_COD_FEE_ZONES); if (substr_count($_SESSION['shipping']['id'], 'ap') !=0) $cod_zones = split("[:,]", MODULE_ORDER_TOTAL_COD_FEE_AP); if (substr_count($_SESSION['shipping']['id'], 'dp') !=0) $cod_zones = split("[:,]", MODULE_ORDER_TOTAL_COD_FEE_DP); //satt inn av Pompel if (substr_count($_SESSION['shipping']['id'], 'servicepakke') !=0) $cod_zones = split("[:,]", MODULE_ORDER_TOTAL_COD_FEE_SERVICEPAKKE); // 2行追加:ゆうパック代金引換 2005.11.15 if (substr_count($_SESSION['shipping']['id'], 'yuupack') !=0) $cod_zones = split("[:,]", MODULE_ORDER_TOTAL_COD_FEE_YUUPACK); if (substr_count($_SESSION['shipping']['id'], 'wfree') !=0) $cod_zones = split("[:,]", MODULE_ORDER_TOTAL_COD_FEE_WFREE);
メールのフッターを変更する
お問い合せ項目追加及び追加項目を必須に
お問い合せ項目追加及び追加項目を必須にするには
includes/templates/template_default/templates/tpl_contact_us_default.php84行目付近に追加したい項目を記載(郵便番号、住所の追加例)
<label class="inputLabel" for="yuubin"><?php echo ENTRY_YUUBIN; ?></label> <?php echo zen_draw_input_field('yuubin', ($error ? $_POST['yuubin'] : $yuubin), ' size="25" id="yuubin"') . '<span class="alert">' . ENTRY_REQUIRED_SYMBOL . '</span>'; ?> <br class="clearBoth" /> <label class="inputLabel" for="address"><?php echo ENTRY_ADDRESS; ?></label> <?php echo zen_draw_input_field('address', ($error ? $_POST['address'] : $address), ' size="40" id="address"') . '<span class="alert">' . ENTRY_REQUIRED_SYMBOL . '</span>'; ?> <br class="clearBoth" /> includes/languages/japanese/contact_us.php追加した項目を記載並びに必須エラー時の文言を記載する define('ENTRY_YUUBIN', '郵便番号:'); define('ENTRY_ADDRESS', 'ご住所:'); define('ENTRY_EMAIL_YUUBIN_CHECK_ERROR','郵便番号の入力がされていないようです。'); define('ENTRY_EMAIL_OFFICEADDRESS_CHECK_ERROR','ご住所の入力がされていないようです。');
includes/languages/japanese/email_extras.phpメール受信時の言語ファイルに下記を追加
define('OFFICE_YUUBIN','<strong>郵便番号:</strong>'); define('OFFICE_ADDRESS','<strong>住所:</strong>');
includes/modules/pages/contact_us/header_php.phpに必死項目設定及びメール受信項目設定する28行目に
else if ($zc_validate_email and !empty($enquiry) and !empty($name) and !empty($yuubin) and !empty($address)) {
59行目から
// Prepare Text-only portion of message $text_message = OFFICE_FROM . "\t" . $name . "\n" . OFFICE_EMAIL . "\t" . $email_address . "\n" . OFFICE_YUUBIN . "\t" . $yuubin . "\n". OFFICE_ADDRESS . "\t" . $address . "\n" . '------------------------------------------------------' . "\n\n" . strip_tags($_POST['enquiry']) . "\n\n" . '------------------------------------------------------' . "\n\n" . $extra_info['TEXT']; // Prepare HTML-portion of message $html_msg['EMAIL_MESSAGE_HTML'] = strip_tags($_POST['enquiry']); $html_msg['CONTACT_US_OFFICE_FROM'] = OFFICE_FROM . ' ' . $name . '<br />' . OFFICE_EMAIL . '(' . $email_address . ')'; $html_msg['EXTRA_INFO'] = $extra_info['HTML']; // Send message
73行目(エラー時メッセージ)
zen_redirect(zen_href_link(FILENAME_CONTACT_US, 'action=success')); } else { $error = true; if (empty($name)) { $messageStack->add('contact', ENTRY_EMAIL_NAME_CHECK_ERROR); } if ($zc_validate_email == false) { $messageStack->add('contact', ENTRY_EMAIL_ADDRESS_CHECK_ERROR); } if (empty($yuubin)) { $messageStack->add('contact', ENTRY_EMAIL_YUUBIN_CHECK_ERROR); } if (empty($address)) { $messageStack->add('contact', ENTRY_EMAIL_OFFICEADDRESS_CHECK_ERROR); } if (empty($enquiry)) { $messageStack->add('contact', ENTRY_EMAIL_CONTENT_CHECK_ERROR); } } } // end action==send
以上
- 1
- 2