<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>EC-CUBE | エス・プロ</title>
	<atom:link href="https://s-pro4.com/cat/web/ec-cube/feed" rel="self" type="application/rss+xml" />
	<link>https://s-pro4.com</link>
	<description>パソコンとシステムの活用を考えます</description>
	<lastBuildDate>Mon, 19 Oct 2026 20:24:57 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://s-pro4.com/wp-content/uploads/2021/10/bb4c6ee1587184e454cc308581390f8d-150x150.png</url>
	<title>EC-CUBE | エス・プロ</title>
	<link>https://s-pro4.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>複数ファイルの文字列置換をワンライナーで</title>
		<link>https://s-pro4.com/page-929.html</link>
		
		<dc:creator><![CDATA[stakaha]]></dc:creator>
		<pubDate>Thu, 20 Mar 2025 05:39:28 +0000</pubDate>
				<category><![CDATA[EC-CUBE]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mac]]></category>
		<guid isPermaLink="false">https://s-pro4.com/?p=929</guid>

					<description><![CDATA[サブフォルダを含めて複数のテキストファイル内を文字列置換したい。一括で。フォルダ構成の想定は下記のような感じ。実際には、もっと深い階層にたくさんファイルがある。 findでファイルを抽出してsedにわたす。 以前、bas [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">サブフォルダを含めて複数のテキストファイル内を文字列置換したい。一括で。<br>フォルダ構成の想定は下記のような感じ。実際には、もっと深い階層にたくさんファイルがある。</p>



<figure class="wp-block-image size-full"><img decoding="async" width="137" height="183" src="https://s-pro4.com/wp-content/uploads/2025/03/oneline.jpg" alt="" class="wp-image-930"/></figure>



<p class="wp-block-paragraph">findでファイルを抽出してsedにわたす。</p>



<p class="wp-block-paragraph">以前、bashでの置換例を書きsedは遅いと書いた。<br><a href="https://s-pro4.com/page-593.html" data-type="post" data-id="593">bashで文字列置換をする</a></p>



<p class="wp-block-paragraph">遅くても便利なら使うのだ。</p>



<p class="wp-block-paragraph">さて、"abc" を "efg" に書き換えるワンライナー（1行実行）の例は下記。</p>



<pre class="wp-block-code"><code>find . -type f -name "*.twig" -exec sed -i 's/abc/efg/g' {} +</code></pre>



<p class="wp-block-paragraph">これは、Gnu版のsedを使用する例<br>sed --version<br>sed (GNU sed) 4.2.2</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">同じコマンドをMacOSのBSD版で実施すると、エラーになる<br>エラーメッセージ「sed: 1: "./t2/index.twig": invalid command code .」<br>これには、ちょっとはまって混乱した。</p>



<p class="wp-block-paragraph">BSD版sedでは、バックアップをとらないとき -i '' という明示をしないとだめということらしい。</p>



<p class="wp-block-paragraph">Macでは、下記のコマンドになる。</p>



<pre class="wp-block-code"><code>find . -type f -name "*.twig" -exec sed -i '' 's/abc/efg/g' {} +</code></pre>



<p class="wp-block-paragraph">逆に、GNUのsedでこれをやると、<br>エラー「sed: s/abc/efg/g を読み込めません: そのようなファイルやディレクトリはありません」<br>-i に関して互換性がない。</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">ちなみに、今回一括置換をやろうと思ったのは、EC-CUBEのバージョンアップで .twig ファイルの書式が変わり、修正が必要になったため。</p>



<p class="wp-block-paragraph">{% for f in form if f.vars.eccube_form_options.auto_render %}<br>↓<br>{% for f in form|filter(f =&gt; f.vars.eccube_form_options.auto_render) %}</p>



<p class="wp-block-paragraph">下記のようなワンライナーで処理。</p>



<pre class="wp-block-code"><code>find . -type f -name "*.twig" -exec sed -i 's/ if f.vars.eccube_form_options.auto_render %}/|filter(f =&gt; f.vars.eccube_form_options.auto_render) %}/g' {} +</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">2026年10月20日追記。</p>



<p class="wp-block-paragraph">find で複数条件を指定たとえば .htmlと.htmを抽出するとき、</p>



<pre class="wp-block-code"><code>find . -type f \( -name "*.html" -o -name "*.htm" \)</code></pre>



<p class="wp-block-paragraph">-oで条件をつなぎ、()でまとめるが、エスケープが必要。</p>



<p class="wp-block-paragraph">また、URLを置換するような場合はsedの置換でデリミタを変えることも可能。<br>デリミタをスラッシュからドル記号へ変更した例</p>



<pre class="wp-block-code"><code>find . -type f \( -name "*.html" -o -name "*.htm" \) -exec sed -i '' 's$https://www\.example\.com/$./$g' {} +</code></pre>



<p class="wp-block-paragraph">さらに対象となるファイル、今回の場合htmlがShift-JISの場合、Macではエラーになった。<br>sed: RE error: illegal byte sequence</p>



<p class="wp-block-paragraph">UTF-8として処理しようとして文字コードが問題なのだと思う。<br>LC_ALL=Cをつける。</p>



<pre class="wp-block-code"><code>find . -type f \( -name "*.html" -o -name "*.htm" \) -exec env LC_ALL=C sed -i '' 's$https://www\.example\.com/$./$g' {} +</code></pre>



<p class="wp-block-paragraph">ただし、上記ではsed -i ''により、置換対象ではないファイルも触られるためタイムスタンプが変わってしまう。<br>厳密に行うには、先に置換対象文字列を含んだファイルだけを抽出してsedにわたす方法で回避できる。</p>



<pre class="wp-block-code"><code>find . -type f \( -name "*.html" -o -name "*.htm" \) -exec sh -c 'for f do if LC_ALL=C grep -qF "https://www.example.com/" "$f"; then LC_ALL=C sed -i "" "s\$https://www\\.example\\.com/\$./\$g" "$f"; fi; done' sh {} +</code></pre>



<p class="wp-block-paragraph">sh -c の中で sed の置換式をダブルクォートで囲んでいるため、区切り文字の $ を \$ とエスケープしている。</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>EC-Cube 4.0.5 → 4.0.6p2へのバージョンアップを試みる</title>
		<link>https://s-pro4.com/page-806.html</link>
		
		<dc:creator><![CDATA[stakaha]]></dc:creator>
		<pubDate>Thu, 12 Sep 2024 15:48:47 +0000</pubDate>
				<category><![CDATA[EC-CUBE]]></category>
		<guid isPermaLink="false">https://s-pro4.com/?p=806</guid>

					<description><![CDATA[プラグインを利用してアップデートを行う。 参考ページ）https://www.ec-cube.net/products/detail.php?product_id=2277 (1)事前準備 アップデートを実行する前に、以 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">プラグインを利用してアップデートを行う。</p>



<p class="wp-block-paragraph">参考ページ）<br><a href="https://www.ec-cube.net/products/detail.php?product_id=2277" data-type="link" data-id="https://www.ec-cube.net/products/detail.php?product_id=2277" target="_blank" rel="noreferrer noopener">https://www.ec-cube.net/products/detail.php?product_id=2277</a></p>



<p class="wp-block-paragraph">(1)事前準備</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">アップデートを実行する前に、以下の設定をご確認ください。<br>・xdebugが有効になっている→xdebugを無効にする<br>・memory_limitが128M→memory_limitを512Mに設定<br>・max_execution_timeが30→max_execution_timeを180に設定</p>
</blockquote>



<p class="wp-block-paragraph">今回のアップデート対象サーバでは、上記全てクリアしており、特に作業は不要だった。</p>



<p class="wp-block-paragraph">(2)データのバックアップを取る。<br>フォルダ丸ごとコピーをとり、データベースはエクスポートしてバックアップ。</p>



<p class="wp-block-paragraph">(3)EC-Cubeをメンテナンスモードにする。</p>



<figure class="wp-block-image size-full is-resized"><img fetchpriority="high" decoding="async" width="787" height="254" src="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup.jpg" alt="" class="wp-image-807" style="width:711px;height:auto" srcset="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup.jpg 787w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup-300x97.jpg 300w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup-768x248.jpg 768w" sizes="(max-width: 787px) 100vw, 787px" /></figure>



<p class="wp-block-paragraph">(4)EC-CUBEアップデートプラグイン(4.0.5〜4.0.6)をインストール</p>



<figure class="wp-block-image size-full"><img decoding="async" width="871" height="107" src="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup2.jpg" alt="" class="wp-image-808" srcset="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup2.jpg 871w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup2-300x37.jpg 300w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup2-768x94.jpg 768w" sizes="(max-width: 871px) 100vw, 871px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="489" src="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup3-1024x489.jpg" alt="" class="wp-image-809" srcset="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup3-1024x489.jpg 1024w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup3-300x143.jpg 300w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup3-768x367.jpg 768w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup3.jpg 1081w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="495" height="199" src="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup4.jpg" alt="" class="wp-image-810" srcset="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup4.jpg 495w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup4-300x121.jpg 300w" sizes="(max-width: 495px) 100vw, 495px" /></figure>



<p class="wp-block-paragraph">(5)プラグイン有効化</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="69" src="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup5-1024x69.jpg" alt="" class="wp-image-811" srcset="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup5-1024x69.jpg 1024w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup5-300x20.jpg 300w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup5-768x51.jpg 768w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup5.jpg 1089w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">再生ボタンのようなものをクリック。</p>



<p class="wp-block-paragraph">(6)プラグインの設定を開く</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="70" src="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup6-1024x70.jpg" alt="" class="wp-image-812" srcset="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup6-1024x70.jpg 1024w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup6-300x21.jpg 300w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup6-768x53.jpg 768w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup6.jpg 1094w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">歯車をクリック</p>



<p class="wp-block-paragraph">(7)プラグインの対応状況の確認</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="484" src="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup7-1024x484.jpg" alt="" class="wp-image-813" srcset="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup7-1024x484.jpg 1024w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup7-300x142.jpg 300w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup7-768x363.jpg 768w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup7.jpg 1102w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">(8)書込権限の確認</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="201" src="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup8-1024x201.jpg" alt="" class="wp-image-814" style="width:711px;height:auto" srcset="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup8-1024x201.jpg 1024w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup8-300x59.jpg 300w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup8-768x150.jpg 768w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup8.jpg 1103w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">(9)ファイル更新の確認へ</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="190" src="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup9-1024x190.jpg" alt="" class="wp-image-815" srcset="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup9-1024x190.jpg 1024w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup9-300x56.jpg 300w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup9-768x142.jpg 768w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup9.jpg 1102w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="358" src="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup10-1024x358.jpg" alt="" class="wp-image-816" srcset="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup10-1024x358.jpg 1024w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup10-300x105.jpg 300w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup10-768x268.jpg 768w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup10.jpg 1105w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">ソースをカスタマイズしている場合には、アップデートで変更内容が消えてしまうため、警告してくれているものと思う。親切。<br>後でバックアップとの差分を見て、必要であれば、上書き後に反映すれば良い。</p>



<p class="wp-block-paragraph">(10)最新バージョンで上書き</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="492" height="198" src="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup11.jpg" alt="" class="wp-image-817" srcset="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup11.jpg 492w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup11-300x121.jpg 300w" sizes="(max-width: 492px) 100vw, 492px" /></figure>



<p class="wp-block-paragraph">(11)エラー発生の対応</p>



<p class="wp-block-paragraph">システムエラーが発生してしまった。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="557" height="275" src="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup12.jpg" alt="" class="wp-image-818" srcset="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup12.jpg 557w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup12-300x148.jpg 300w" sizes="(max-width: 557px) 100vw, 557px" /></figure>



<p class="wp-block-paragraph">原因が全くわからない。<br>php.iniでPHPのエラー表示をONにすると・・・。</p>



<pre class="wp-block-code"><code>Warning: include(&lt;PATH>/vendor/composer/../../app/proxy/entity/src/Eccube/Entity/Product.php): failed to open stream: No such file or directory in &lt;PATH>/vendor/composer/ClassLoader.php on line 444</code></pre>



<p class="wp-block-paragraph">Product.phpがないとのこと。<br>ディレクトリを調べるとたしかになかった。なくなっていた。</p>



<p class="wp-block-paragraph">よって、バックアップからapp/proxy/entity/src/Eccube/Entity/Product.phpをコピーする。<br>エラー発生しなくなった。</p>



<p class="wp-block-paragraph">参考ページ）<br><a href="https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=27424&amp;forum=11&amp;post_id=108747" target="_blank" rel="noreferrer noopener">https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=27424&amp;forum=11&amp;post_id=108747</a></p>



<p class="wp-block-paragraph">(12)アップデート完了</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="919" height="600" src="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup13.jpg" alt="" class="wp-image-819" srcset="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup13.jpg 919w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup13-300x196.jpg 300w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup13-768x501.jpg 768w" sizes="(max-width: 919px) 100vw, 919px" /></figure>



<p class="wp-block-paragraph">ログイン画面へアクセスすると、「ファイルの更新が完了しました。引き続き、データの更新を行ってください。」とのメッセージ。<br>これでアップデートが完了した。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1020" height="163" src="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup14.jpg" alt="" class="wp-image-820" srcset="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup14.jpg 1020w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup14-300x48.jpg 300w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup14-768x123.jpg 768w" sizes="(max-width: 1020px) 100vw, 1020px" /></figure>



<p class="wp-block-paragraph">(13)メンテナンスモード無効化</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="789" height="253" src="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup15.jpg" alt="" class="wp-image-821" srcset="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup15.jpg 789w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup15-300x96.jpg 300w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup15-768x246.jpg 768w" sizes="(max-width: 789px) 100vw, 789px" /></figure>



<p class="wp-block-paragraph">(14)キャッシュ削除</p>



<p class="wp-block-paragraph">これは念の為。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1021" height="251" src="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup16.jpg" alt="" class="wp-image-822" srcset="https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup16.jpg 1021w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup16-300x74.jpg 300w, https://s-pro4.com/wp-content/uploads/2024/09/ec-cube_vup16-768x189.jpg 768w" sizes="(max-width: 1021px) 100vw, 1021px" /></figure>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>EC-CUBEの納品書で左上に配送先ではなく購入者の情報を掲載したい</title>
		<link>https://s-pro4.com/page-337.html</link>
		
		<dc:creator><![CDATA[stakaha]]></dc:creator>
		<pubDate>Wed, 03 Jan 2024 13:36:36 +0000</pubDate>
				<category><![CDATA[EC-CUBE]]></category>
		<guid isPermaLink="false">https://s-pro4.com/?p=337</guid>

					<description><![CDATA[誰かにプレゼントをするような場合、購入者と配送先が異なることがある。 管理画面の[受注管理]→[受注一覧]→[納品書出力]を押すと「お買上げ明細書(納品書)」のPDFが出力されるが、この納品書の宛名に当たる部分が、デフォ [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>誰かにプレゼントをするような場合、購入者と配送先が異なることがある。</p>
<p>管理画面の[受注管理]→[受注一覧]→[納品書出力]を押すと「お買上げ明細書(納品書)」のPDFが出力されるが、この納品書の宛名に当たる部分が、デフォルトでは配送先に固定されている。</p>
<p>ここを配送先ではなく、お金を払った購入者(請求先)へ変更したいのだ。</p>
<p>例えば、山田太郎さんが鈴木一郎さんへプレゼントした場合には、納品書が下記のようになる。</p>
<p><img loading="lazy" decoding="async" class="alignnone size-large wp-image-344" src="https://s-pro4.com/wp-content/uploads/2024/01/930f17e5a754868efd09dbace6c1cefc-1024x693.jpg" alt="" width="1024" height="693" srcset="https://s-pro4.com/wp-content/uploads/2024/01/930f17e5a754868efd09dbace6c1cefc-1024x693.jpg 1024w, https://s-pro4.com/wp-content/uploads/2024/01/930f17e5a754868efd09dbace6c1cefc-300x203.jpg 300w, https://s-pro4.com/wp-content/uploads/2024/01/930f17e5a754868efd09dbace6c1cefc-768x520.jpg 768w, https://s-pro4.com/wp-content/uploads/2024/01/930f17e5a754868efd09dbace6c1cefc-1536x1040.jpg 1536w, https://s-pro4.com/wp-content/uploads/2024/01/930f17e5a754868efd09dbace6c1cefc.jpg 1970w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<p>E-CUBE 4.2.0にて実験。</p>
<p>参考サイト）<br />
<a href="https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=26348&amp;forum=17&amp;post_id=104935#forumpost104935" target="_blank" rel="noopener">https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=26348&amp;forum=17&amp;post_id=104935#forumpost104935</a><br />
<a href="https://qiita.com/chihiro-adachi/items/b3bb70e6abbc0f824965" target="_blank" rel="noopener">https://qiita.com/chihiro-adachi/items/b3bb70e6abbc0f824965</a><br />
<a href="https://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=flat&amp;order=ASC&amp;topic_id=26833&amp;forum=11" target="_blank" rel="noopener">https://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=flat&amp;order=ASC&amp;topic_id=26833&amp;forum=11</a><br />
<a href="https://web-memo.yzkzk365.com/2021/07/30/eccube4-nouhinsyo-tyumonsya/" target="_blank" rel="noopener">https://web-memo.yzkzk365.com/2021/07/30/eccube4-nouhinsyo-tyumonsya/</a></p>
<p>&nbsp;</p>
<p>準備や、エラー発生を含めて順を追って記載する。</p>
<p>(0)ソースを直接編集して動作確認<br />
まずsrc下で直接編集。<br />
src/Eccube/Service/OrderPdfService.php</p>
<p>renderOrderData()内で、</p>
<p>$Order = $Shipping-&gt;getOrder();<br />
の行を活かして、<br />
$Shipping-&gt;getPref()<br />
を<br />
$Order-&gt;getPref()<br />
に変更する。<br />
同様に $Shipping-&gt;getAddr01();<br />
を<br />
$Order-&gt;getAddr01();<br />
といった形でメソッド内の $Shipping を $Order に修正する。</p>
<pre>    protected function renderOrderData(Shipping $Shipping)
    {
.....
        $Order = $Shipping-&gt;getOrder();

if(0):
        // 購入者都道府県+住所1
        // $text = $Order-&gt;getPref().$Order-&gt;getAddr01();
        $text = $Shipping-&gt;getPref().$Shipping-&gt;getAddr01();
        $this-&gt;lfText(27, 47, $text, 10);
        $this-&gt;lfText(27, 51, $Shipping-&gt;getAddr02(), 10); // 購入者住所2

        // 購入者氏名
        if (null !== $Shipping-&gt;getCompanyName()) {
            // 会社名
            $text = $Shipping-&gt;getCompanyName();
            $this-&gt;lfText(27, 57, $text, 11);
            // 氏名
            $text = $Shipping-&gt;getName01().'　'.$Shipping-&gt;getName02().'　様';
            $this-&gt;lfText(27, 63, $text, 11);
        } else {
            $text = $Shipping-&gt;getName01().'　'.$Shipping-&gt;getName02().'　様';
            $this-&gt;lfText(27, 59, $text, 11);
        }
endif;

        // 購入者都道府県+住所1
        // $text = $Order-&gt;getPref().$Order-&gt;getAddr01();
        $text = $Order-&gt;getPref().$Order-&gt;getAddr01();
        $this-&gt;lfText(27, 47, $text, 10);
        $this-&gt;lfText(27, 51, $Order-&gt;getAddr02(), 10); // 購入者住所2

        // 購入者氏名
        if (null !== $Order-&gt;getCompanyName()) {
            // 会社名
            $text = $Order-&gt;getCompanyName();
            $this-&gt;lfText(27, 57, $text, 11);
            // 氏名
            $text = $Order-&gt;getName01().'　'.$Order-&gt;getName02().'　様';
            $this-&gt;lfText(27, 63, $text, 11);
        } else {
            $text = $Order-&gt;getName01().'　'.$Order-&gt;getName02().'　様';
            $this-&gt;lfText(27, 59, $text, 11);
        }
</pre>
<p>&nbsp;</p>
<p>この修正で問題なく、配送者が購入者へ置き換わるることを確認。</p>
<p>さて、このままだとEC-CUBE本体のアップデートで修正が消えてしまう可能性があるため、src/Eccube/Service/OrderPdfService.php の修正は元に戻して app下に修正を反映することにする。</p>
<p>&nbsp;</p>
<p>(1)PDF出力のソースをコピーして編集<br />
src/Eccube/Service/OrderPdfService.php<br />
↓<br />
app/Customize/Service/OrderPdfService.php</p>
<p>修正内容は同じで、function renderOrderData 内の $Shipping を $Order に修正する。</p>
<p>&nbsp;</p>
<p>(2)作成した app 下の OrderPdfService.php が参照されるよう設定</p>
<p>(1)だけをやっても、作成したphpファイルがが即使われるわけではない。twigファイルとは違うようだ。<br />
よって、yamlで指定する。</p>
<p>app/Customize/Resource/config/services.yaml<br />
を作成し、下記の内容にする。</p>
<pre>services:
  Customize\Service\OrderPdfService:
    public: false
    autowire: true
    decorates: Eccube\Service\OrderPdfService
</pre>
<p>ここで再度納品書を出力すると、下記エラーが発生。</p>
<p>----------<br />
Cannot resolve argument $orderPdfService of "Eccube\Controller\Admin\Order\OrderController::exportPdfDownload()": Cannot autowire service "Customize\Service\OrderPdfService": argument "$taxRuleService" of method "__construct()" has type "Customize\Service\TaxRuleService" but this class was not found.<br />
----------</p>
<p><img loading="lazy" decoding="async" class="alignnone size-large wp-image-342" src="https://s-pro4.com/wp-content/uploads/2024/01/fd66e0aa743e04d30b40070da6d61e69-1024x503.jpg" alt="" width="1024" height="503" srcset="https://s-pro4.com/wp-content/uploads/2024/01/fd66e0aa743e04d30b40070da6d61e69-1024x503.jpg 1024w, https://s-pro4.com/wp-content/uploads/2024/01/fd66e0aa743e04d30b40070da6d61e69-300x147.jpg 300w, https://s-pro4.com/wp-content/uploads/2024/01/fd66e0aa743e04d30b40070da6d61e69-768x377.jpg 768w, https://s-pro4.com/wp-content/uploads/2024/01/fd66e0aa743e04d30b40070da6d61e69.jpg 1384w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<p>&nbsp;</p>
<p>taxRuleService のクラスがない的なことですね。</p>
<p>&nbsp;</p>
<p>(3)app/Customize/Service/OrderPdfService.phpを再修正</p>
<p>use Eccube\Service\TaxRuleService;</p>
<p>を追加する。</p>
<p>ここで納品書を出そうとするとまたエラー発生。</p>
<p>----------<br />
Argument 2 passed to Eccube\Controller\Admin\Order\OrderController::exportPdfDownload() must be an instance of Eccube\Service\OrderPdfService, instance of Customize\Service\OrderPdfService given, called in [ドキュメントルート]/ec/vendor/symfony/http-kernel/HttpKernel.php on line 153<br />
----------</p>
<p><img loading="lazy" decoding="async" class="alignnone size-large wp-image-341" src="https://s-pro4.com/wp-content/uploads/2024/01/e3e9239a6917d01560b27a342f25163b-1024x958.jpg" alt="" width="1024" height="958" srcset="https://s-pro4.com/wp-content/uploads/2024/01/e3e9239a6917d01560b27a342f25163b-1024x958.jpg 1024w, https://s-pro4.com/wp-content/uploads/2024/01/e3e9239a6917d01560b27a342f25163b-300x281.jpg 300w, https://s-pro4.com/wp-content/uploads/2024/01/e3e9239a6917d01560b27a342f25163b-768x718.jpg 768w, https://s-pro4.com/wp-content/uploads/2024/01/e3e9239a6917d01560b27a342f25163b.jpg 1386w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<p>コントローラー側も直さないとだめということですね。</p>
<p>(4)コントローラーのソースをコピーして編集<br />
app/Customize/Controllerに<br />
Admin/Order フォルダを作成し、<br />
src/Eccube/Controller/Admin/Order/OrderController.php<br />
を下記にコピーする。<br />
app/Customize/Controller/Admin/OrderOrderController.php<br />
そして下記の内容を修正する。</p>
<p>----------<br />
namespace Eccube\Controller\Admin\Order;<br />
↓<br />
namespace Customize\Controller\Admin\Order;<br />
----------</p>
<p>----------<br />
// use Eccube\Service\OrderPdfService;<br />
// ↓<br />
use Customize\Service\OrderPdfService;<br />
----------</p>
<p>これで、完了。</p>
<p>納品書の配送先を購入者へ差し替えることができた。</p>
<p><img loading="lazy" decoding="async" class="alignnone size-large wp-image-345" src="https://s-pro4.com/wp-content/uploads/2024/01/e3d936f474c9ab436d28cf90bc843415-1024x702.jpg" alt="" width="1024" height="702" srcset="https://s-pro4.com/wp-content/uploads/2024/01/e3d936f474c9ab436d28cf90bc843415-1024x702.jpg 1024w, https://s-pro4.com/wp-content/uploads/2024/01/e3d936f474c9ab436d28cf90bc843415-300x206.jpg 300w, https://s-pro4.com/wp-content/uploads/2024/01/e3d936f474c9ab436d28cf90bc843415-768x526.jpg 768w, https://s-pro4.com/wp-content/uploads/2024/01/e3d936f474c9ab436d28cf90bc843415-1536x1053.jpg 1536w, https://s-pro4.com/wp-content/uploads/2024/01/e3d936f474c9ab436d28cf90bc843415.jpg 1970w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<p>&nbsp;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>EC-CUBEのメール設定でSMTPを使うときの注意</title>
		<link>https://s-pro4.com/page-331.html</link>
		
		<dc:creator><![CDATA[stakaha]]></dc:creator>
		<pubDate>Fri, 29 Dec 2023 17:50:42 +0000</pubDate>
				<category><![CDATA[EC-CUBE]]></category>
		<guid isPermaLink="false">https://s-pro4.com/?p=331</guid>

					<description><![CDATA[さくらサーバのクイックインストールでEC-CUBEをインストールをしたら、カート(/shopping/)に進んだだけでエラーになってしまった。 システムエラーが発生しました。 大変お手数ですが、サイト管理者までご連絡くだ [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>さくらサーバのクイックインストールでEC-CUBEをインストールをしたら、カート(/shopping/)に進んだだけでエラーになってしまった。</p>
<p>システムエラーが発生しました。<br />
大変お手数ですが、サイト管理者までご連絡ください。</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-332" src="https://s-pro4.com/wp-content/uploads/2023/12/2a6e4ec2780c6e9ac4bc456578cecc13.jpg" alt="" width="477" height="357" srcset="https://s-pro4.com/wp-content/uploads/2023/12/2a6e4ec2780c6e9ac4bc456578cecc13.jpg 477w, https://s-pro4.com/wp-content/uploads/2023/12/2a6e4ec2780c6e9ac4bc456578cecc13-300x225.jpg 300w" sizes="(max-width: 477px) 100vw, 477px" /></p>
<p>ただ普通にインストールしただけなのに。</p>
<p>ログを確認すると、メール設定の部分でつまづいていることがわかった。</p>
<p>[2023-12-30T01:04:08.572934+09:00] front.ERROR [cff26ec0] [f607b03] [N/A] [Eccube\Log\Logger:log:66] - システムエラーが発生しました。 ["The controller for URI \"/shopping\" is not callable: The \"smtp://メールアドレス:パスワード\" mailer DSN is invalid."</p>
<p>メール設定は、.envで下記になっていた。</p>
<p>MAILER_DSN=smtp://メールアドレス:パスワード@サーバ名:465?auth_mode=plain</p>
<p>一見問題なさそうだが、パスワードに#が入っていることがNGだった理由。<br />
.envでは #以降がコメントアウトになってしまうからね。<br />
それでログでDSN is invalidになっているし、ログ内でもDSNのパスワード部分が途中で切れていた。</p>
<p>さくらサーバの仕様としてはメールパスワードに記号が使えるし # を使っても問題ないが、EC-CUBEのSMTPに使う場合には # は使えないということ。</p>
<p>同様に、データベースパスワードにも使えないことになるね。</p>
<p>ちなみに、これまでEC-CUBEを使用したときにSMTP設定をした記憶がなくて、SMTPを使わないときは .envが下記になっていた。</p>
<p>MAILER_URL=smtp://localhost:25</p>
<p>さくらサーバのクイックインストールでは、メールアドレスだけではなく、SMTP情報を聞かれたのでした。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>EC-CUBEのキャッシュをコマンドラインで消去する</title>
		<link>https://s-pro4.com/page-169.html</link>
		
		<dc:creator><![CDATA[stakaha]]></dc:creator>
		<pubDate>Sun, 18 Jun 2023 18:31:25 +0000</pubDate>
				<category><![CDATA[EC-CUBE]]></category>
		<guid isPermaLink="false">https://s-pro4.com/?p=169</guid>

					<description><![CDATA[とあるプラグインをインストールした後、 システムエラーが発生しました。お手数ですが、サイト管理者までご連絡ください。 &#160; 「ログイン画面へ」をクリックしても、そのログイン画面すらシステムエラー。 これまでも特定 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>とあるプラグインをインストールした後、<br />
システムエラーが発生しました。お手数ですが、サイト管理者までご連絡ください。</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-170" src="https://s-pro4.com/wp-content/uploads/2023/06/c297da20fd3de22ae74e47c702ae8934.jpg" alt="" width="560" height="278" srcset="https://s-pro4.com/wp-content/uploads/2023/06/c297da20fd3de22ae74e47c702ae8934.jpg 560w, https://s-pro4.com/wp-content/uploads/2023/06/c297da20fd3de22ae74e47c702ae8934-300x149.jpg 300w" sizes="(max-width: 560px) 100vw, 560px" /></p>
<p>&nbsp;</p>
<p>「ログイン画面へ」をクリックしても、そのログイン画面すらシステムエラー。</p>
<p>これまでも特定ページがシステムエラーになることはたまにありましたが、管理画面へ全くアクセスできないので、キャッシュクリアもできない。</p>
<p>と思ったら、コマンドラインからできるようです。</p>
<p>sshで接続して下記のコマンドを実行。</p>
<p>rm -rf [ドキュメントルート]/var/cache/*</p>
<p>これで復旧できました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
