はじめに
前回の続きで、エクステンションを追加しようかと思ったら、お問合せの規約の同意がないことに気づいた。
OCmodの理解を含めて、とりあえずやってみる。今回はテンプレートだけの修正じゃないのでプログラムを変更しないといけないのでちゃんとやってみる。
変更する前に
とりあえず、今回はすでに他の機能で実現されているのでそれを参考に、各ソースをみてみる。
下記を参考にして
catalog\controller\account\register.php
catalog\controller\checkout\register.php
実際の変更するファイルを見てみる
検知用のコードが複数ないかチェックする
catalog\controller\information\contact.php
public function index() 関数のメールアドレスのチェックの前にコード追加
protected function validate()関数の宣言の後にコード追加
日本語言語ファイルを見てみる
catalog\language\ja-jp\information\contact.php
opencartの場合、言語ファイルも関数毎で読み込んでいるので、他のコメントが個別で記載しているので、contactにも追加しないといけない。ja-jp.phpはきっと全部読んでるんだろうけど。。
言語ファイルにも追加するため。//textのあとか。text_locationの前に追加したいかな?
<?php
// Heading
$_['heading_title'] = 'お問合せ';
// Text
$_['text_location'] = '所在地';
$_['text_store'] = 'ストア情報';
$_['text_contact'] = 'お問合せフォーム';
$_['text_address'] = '住所:';
ユーザーテンプレートを見てみる
現在のテンプレート。規約にチェックのタグがない。。captchaはあるんだ。。
catalog\view\theme\default\template\information\contact.twig
{{ captcha }}
</fieldset>
<div class="buttons">
<div class="pull-right">
<input class="btn btn-primary" type="submit" value="{{ button_submit }}" />
</div>
</div>
参考にユーザーテンプレートアカウント登録を見てみる
参考にアカウントのテンプレートを見てみる。チェックらしきがある。
これを参考に・・
catalog\view\theme\default\template\account.twig
{{ captcha }}
{% if text_agree %}
<div class="buttons">
<div class="pull-right">{{ text_agree }}
{% if agree %}
<input type="checkbox" name="agree" value="1" checked="checked" />
{% else %}
<input type="checkbox" name="agree" value="1" />
{% endif %}
<input type="submit" value="{{ button_continue }}" class="btn btn-primary" />
</div>
</div>
{% else %}
<div class="buttons">
<div class="pull-right">
<input type="submit" value="{{ button_continue }}" class="btn btn-primary" />
</div>
</div>
{% endif %}
完成したinstall.xml
実際にinstall.xmlを書いてみた。UTF8で保存してね。前回のOpenCartのエクステンションインストール&作成1で説明したように圧縮して、アップロードする。
Contact_form_Agree_jp_oc3.ocmod.zipでやってみた。
<?xml version="1.0" encoding="UTF-8"?>
<modification>
<name>Contact form Agree</name>
<code>contact-agreeform</code>
<version>1.0</version>
<author>omakase</author>
<link>http://omakase.net</link>
<file path="catalog/controller/information/contact.php">
<operation error="abort">
<search><![CDATA[
if (isset($this->request->post['email'])) {
]]></search>
<add position="before"><![CDATA[
if (isset($this->error['agree'])) {
$data['error_agree'] = $this->error['agree'];
} else {
$data['error_agree'] = '';
}
if ($this->config->get('config_account_id')) {
$this->load->model('catalog/information');
$information_info = $this->model_catalog_information->getInformation($this->config->get('config_account_id'));
if ($information_info) {
$data['text_agree'] = sprintf($this->language->get('text_agree'), $this->url->link('information/information/agree', 'information_id=' . $this->config->get('config_account_id'), true), $information_info['title'], $information_info['title']);
} else {
$data['text_agree'] = '';
}
} else {
$data['text_agree'] = '';
}
if (isset($this->request->post['agree'])) {
$data['agree'] = $this->request->post['agree'];
} else {
$data['agree'] = '';
}
]]></add>
</operation>
<operation error="abort">
<search><![CDATA[
function validate() {
]]></search>
<add position="after"><![CDATA[
if ($this->config->get('config_account_id')) {
$this->load->model('catalog/information');
$information_info = $this->model_catalog_information->getInformation($this->config->get('config_account_id'));
if ($information_info && !isset($this->request->post['agree'])) {
$this->error['agree'] = sprintf($this->language->get('error_agree'), $information_info['title']);
}
}
]]></add>
</operation>
</file>
<file path="catalog/view/theme/*/template/information/contact.twig">
<operation error="skip">
<search><![CDATA[
<div class="buttons">
]]></search>
<add position="before"><![CDATA[
{% if text_agree %}
{% if error_agree %}
<div class="buttons col-sm-12">
<div class="pull-right text-danger">{{ error_agree }}</div>
</div>
{% endif %}
<div class="buttons">
<div class="pull-right">{{ text_agree }}
{% if agree %}
<input type="checkbox" name="agree" value="1" checked="checked" />
{% else %}
<input type="checkbox" name="agree" value="1" />
{% endif %}
<input class="btn btn-primary" type="submit" value="{{ button_submit }}" />
</div>
</div>
{% else %}
]]></add>
</operation>
<operation error="skip">
<search><![CDATA[
</form>
]]></search>
<add position="before"><![CDATA[
{% endif %}
]]></add>
</operation>
</file>
<file path="catalog/language/ja-jp/information/contact.php">
<operation error="skip">
<search><![CDATA[
$_['text_location']
]]></search>
<add position="before"><![CDATA[
//ccv add
$_['text_agree'] = '<a href="%s" class="agree"><b>%s</b></a>を読んで同意します';
$_['error_agree'] = '警告:%sに同意する必要があります!';
//ccv add end
]]></add>
</operation>
</file>
<file path="catalog/language/en-gb/information/contact.php">
<operation error="skip">
<search><![CDATA[
$_['text_location']
]]></search>
<add position="before"><![CDATA[
// agreeContact
$_['text_agree'] = 'I have read and agree to the <a href="%s" class="agree"><b>%s</b></a>';
$_['error_agree'] = 'Warning: You must agree to the %s!';
// agreeContact end
]]></add>
</operation>
</file>
</modification>
拡張機能でインストール、実行!( ノД`)シクシク...
/storage/modificationの中身みてみる。
xmlで確認、言語ファイルの句読点忘れや、もろもろタイポミス。。
拡張子がxmlだから、エディターがxmlのモードだなぁ。。わかりにくいな。。。
さいごに
今回は、あえてpositionのafterとbeforeを使うように、twigと言語ファイル、ソースコードの変更が確認できた。
patchやな。。やってみてわかったのが、直ソース触るより、差分もってたほうが便利だと気が付く・・それに以外に簡単
こっから、お問い合わせの項目増加などできそうな感じ、このxmlベースで対応できそう。
次回こそ、エクステンションインストールするかな。。
では・・
関連記事
OpenCartのエクステンションインストール&作成3
次の記事はこちらから
https://www.omakase.net/blog/2021/08/opencart-ext3.html
OpenCartのインストール
前回の記事はこちらから
https://www.omakase.net/blog/2021/07/opencart.html
OpenCartのエクステンションインストール&作成1
記事はこちらから
https://www.omakase.net/blog/2021/08/opencart-ext1.html
OpenCartのエクステンションインストール&作成4
記事はこちらから
https://www.omakase.net/blog/2021/08/opencart-ext4.html
OpenCartのエクステンションインストール&作成5
記事はこちらから
https://www.omakase.net/blog/2021/08/opencart-ext5.html