バージョン選択

フォーラム

メニュー

オンライン状況

53 人のユーザが現在オンラインです。 (43 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 53
もっと...

サイト内検索

質問 > フロント機能 > コンテンツ管理(ページ管理)の商品一覧ページの編集について

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
kmDnk
投稿日時: 2019/3/20 19:36
対応状況: 解決済
常連
登録日: 2017/8/19
居住地:
投稿: 65
コンテンツ管理(ページ管理)の商品一覧ページの編集について
▼テンプレート
[EC-CUBE] 3.0.15
[レンタルサーバ] エックスサーバー
[OS] macOS 10.14.3
[PHP] PHP7.2.6
[データベース] 5.7.17 - MySQL
[WEBサーバ] apache 2.4.x、nginx
[ブラウザ] Google Chrome 73.0.3683.75
[導入プラグインの有無] 有り(クロネコヤマト カード・後払い一体型決済モジュール等)
[カスタマイズの有無] 以下記載
[現象] 検索窓へ検索したキーワードを取得したく、「商品一覧ページ」の編集で以下のサイトを参照してPHPで作ったファイルを表示するようページ編集しました。
https://esuppo.ecopls.link/wp/archives/68
結果、検索ワードが1つの単語だと、検索ワード(例:hoge)を取得出来たのですが、複合キーワード(例:hoge hoge)となると
php_file_get_contents という関数が使えません。複合キーワードの場合なぜ、この関数が使えないのでしょうか。
複合キーワードでもそうで無くても、使える用にするには「src/Eccube/Twig/Extension/EccubeExtension.php」のファイルではなく、他のファイルを編集すれば使える用になるのでしょうか。
ご存じの方、ご教示頂けますでしょうか。よろしくお願い致します。
umebius
投稿日時: 2019/3/20 19:44
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: コンテンツ管理(ページ管理)の商品一覧ページの編集について

検索ワードを取得するPHPファイルはどのようなコードでしょうか?

また、php_file_get_contentsという関数をどのように使用されているか拝見できますでしょうか。

kmDnk
投稿日時: 2019/3/20 19:58
対応状況: −−−
常連
登録日: 2017/8/19
居住地:
投稿: 65
Re: コンテンツ管理(ページ管理)の商品一覧ページの編集について
回答ありがとうございます。

商品一覧ページに以下のコードを追記してPHPファイルを読み込んでいます。
検索があった場合のみ、phpファイルを読み込むようにしています。

<!-- ↓検索ワードの取得スクリプトエリア -->
{% if search_form.vars.value.name %}
{% set search_word = search_form.vars.value.name %}
{% set search_url = 'https:hogehoge?word=' %}
{% if app['mobile_detect'].isMobile and app['mobile_detect'].isTablet == false %}
{% set device = 'Mobile' %}
{% elseif app['mobile_detect'].isTablet %}
{% set device = 'Tablet' %}
{% else %}
{% set device = 'PC' %}
{% endif %}
{% set query = '&device=' %}
{% set query1 = '&ip=' %}
{% set ipadd = app.ipadd %}
{{ php_file_get_contents(search_url~search_word~query~device~query1~ipadd) }}
{% endif %}
<!-- ↑検索ワードの取得スクリプトエリア -->

流れとしては、
検索ワードと、読み込みたいPHPファイルパスと、クエリ、IPアドレス(app.ipadd)を変数に代入し、
最後にphp_file_get_contents関数を使って、phpファイルへアクセスしてもらいます。
この時、パスは通常パスと、wordなどのクエリを追加したものを加えてアクセスします。

PHPファイル側では、もらったREQUESTを変数へ代入し、それをデータベースへ登録するようにし
検索ワードと、端末、IPアドレスなど登録する流れにしています。

PHPソースは以下のものです。

<?php
/*==============================
ヘッダーの検索窓に検索ワードを入力されたら
データベースへ登録するスクリプト
==============================*/
require_once($_SERVER['DOCUMENT_ROOT'].'/path');
require_once($_SERVER['DOCUMENT_ROOT'].'/path');
global $db;

//変数にREQUESTを代入
$searchWord = $_REQUEST['word'];
$devices = $_REQUEST['device'];
$ipAdd = $_REQUEST["ip"];
//自社のグローバルIPアドレスからの検索は「自社検索」と変数に代入
if($ipAdd == $companyIP){
$ipAdd = '自社検索';
};

$searchWordData = 'INSERT INTO shop_data(shop_data_search_word,shop_data_device,shop_data_ip,shop_data_created)VALUE("'.$searchWord.'","'.$devices.'","'.$ipAdd.'",NOW())';
mysqli_query($db , $searchWordData);
exit();
?>
kmDnk
投稿日時: 2019/3/20 20:12
対応状況: −−−
常連
登録日: 2017/8/19
居住地:
投稿: 65
Re: コンテンツ管理(ページ管理)の商品一覧ページの編集について
因みに、半角スペースで検索すると機能しないのですが
全角スペースで「品名 品名」のように複合キーワードで検索かけると
機能します。
468
投稿日時: 2019/3/20 20:37
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: コンテンツ管理(ページ管理)の商品一覧ページの編集について
php_file_get_contentsの引数に組み立てた文字列を渡していると思いますが、
その文字列はurlとして処理されるかと思います。
多分、urlエンコードが処理されていない為、urlとして認識されていないのではないでしょうか?
(通信が発生しない)


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

kmDnk
投稿日時: 2019/3/20 20:44
対応状況: −−−
常連
登録日: 2017/8/19
居住地:
投稿: 65
Re: コンテンツ管理(ページ管理)の商品一覧ページの編集について
回答ありがとうございます。

1つのかたまりとなっている単語(hoge)は正常に機能するのですが、
2つの単語(hoge hoge)となっている場合に機能しないので、その違いがなぜなのでしょうか。

因みに前述しましたが、2つの単語でも全角スペースを使った単語(hoge hoge)だと、正常に機能しました。

php_file_get_contentsという関数が機能していないのは明白なのですが、それがなぜなのかわかりません。

検索後のURLは
半スペだと→https://hoge/products/list?category_id=&name=hoge+hogeですが、
全スペだと→https://hoge/products/list?category_id=&name=hoge%E3%80%80hogeとなります。

この違いによって、php_file_get_contents関数が機能しないのは、EC-CUBEのデフォルトのソースで条件分岐していたりするのでしょうか。
468
投稿日時: 2019/3/20 21:04
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: コンテンツ管理(ページ管理)の商品一覧ページの編集について
URLの書式ルールで、半角スペースの使用がNGだからだと思います。
半角スペースは%20に変換する必要があると思います。
この辺りは、インターネットの規格の取り決めになります。

php_file_get_contentsは、URLの書式で問題なければ処理を進めて、
NGの場合はエラーとして処理を止めていると思います。
(URLが不正な場合、どこに通信したら良いか分からない為)

全角スペースは、半角スペースとは別物で文字列として判断されていると思います。

EccubeExtension.phpのfile_get_contentsの引数に
urlencode()で変換した文字列を渡せば良いのではないでしょうか?


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

kmDnk
投稿日時: 2019/3/20 21:15
対応状況: −−−
常連
登録日: 2017/8/19
居住地:
投稿: 65
Re: コンテンツ管理(ページ管理)の商品一覧ページの編集について
回答ありがとうございます。

私は以下のサイトを見てその通りに記載したのですが
https://esuppo.ecopls.link/wp/archives/68

EccubeExtension.phpには
file_get_contents関数は書いていないのですが、
どのように記載すると良いのでしょうか。
468
投稿日時: 2019/3/20 21:52
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: コンテンツ管理(ページ管理)の商品一覧ページの編集について
リンク先のソースは、php_を先頭に付ける事でphp関数が呼び出せるような記述でしょうか?
$allowFunctionsにurlencodeを追記して、
urlencodeを使えるようにして以下のような記述でエンコードできるのではないでしょうか?
{% set search_word = php_urlencode(search_form.vars.value.name) %}


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

kmDnk
投稿日時: 2019/3/20 22:00
対応状況: −−−
常連
登録日: 2017/8/19
居住地:
投稿: 65
Re: コンテンツ管理(ページ管理)の商品一覧ページの編集について
回答頂き、ありがとうございます。

以下の様にtwigで検索ワードに半スペがある場合、
全角に置換することで、正常に機能することができました。

{% set search_word = search_word|replace({ (' '): ' ' }) %}
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,288名です
総投稿数は109,688件です

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.