バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

 > 管理機能 > 管理画面で例外が発生

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_yamada
投稿日時: 2016/9/30 10:18
対応状況: 開発中
新米
登録日: 2016/8/30
居住地:
投稿: 8
管理画面で例外が発生
管理画面の商品マスターでCrawlerを使っているのですが、
eccube.CRITICAL: InvalidArgumentException: The current node list is empty. (uncaught exception)がでて困っています。try〜catchで解決するかと思ったのですがうまく行きません。ご教授いただけると助かります。
コードは以下のとおりです。

event.yml
eccube.event.route.admin_product.exception:
- [onAdminException,NORMAL]
eccube.event.route.admin_product.response:
- [onAdminRenderBefore,NORMAL]
eccube.event.route.cart.response:
- [onCartRenderBefore,NORMAL]
Admin/Product/index.twig:
- [onRenderProductList, NORMAL]

controller
<?php
namespace Plugin\StockControll;

use Eccube\Application;
use Eccube\Common\Constant;
use Eccube\Entity\Category;
use Eccube\Event\EventArgs;
use Eccube\Event\TemplateEvent;
use Plugin\CategoryContent\Entity\CategoryContent;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\DomCrawler\Crawler;

class StockControllEvent
{
/** @var \Eccube\Application $app */
private $app;

public function __construct($app)
{
$this->app = $app;
}

public function onAdminProduct2(EventArgs $event)
{
}

// Crawlerを使った処理
public function onCartRenderBefore(FilterResponseEvent $event){
}
public function onAdminException(FilterResponseEvent $event){
dump(000);
}
public function onAdminRenderBefore(FilterResponseEvent $event)
{
//引数eventから 内容を取得する
$response = $event->getResponse();

// 在庫切れ情報を挿入
$addContent = '<span class="icon_stock">在庫なし</span>';

// 書き換えhtmlの初期化
$html = $response->getContent();

// 書き換え処理
// Crawlerクラスのhtmlメソッドを確認
// try catchで例外がないときにだけ、正常な動作

try{
$crawler = new Crawler($html);
$filter = $crawler->filter('.item_detail > a');
$oldHtml = $filter->html();
$newHtml = $oldHtml . $addContent;

$html = $crawler->html();
$html = str_replace($oldHtml, $newHtml, $html);

$response->setContent($html);
$event->setResponse($response);
}catch(Exception $e){
$e->getMessage();
}
}

public function onRenderProductList(TemplateEvent $event){

// twigコードに在庫切れ情報を挿入
/*$snipet =
'{% set displayed = false %}
{% for ProductClass in Product.ProductClasses %}
{% if not displayed and ProductClass.StockFind == false %}
<span class="icon_stock">在庫なし</span>
{% set displayed = true %}
{% endif %}
{% endfor %}';

// 検索する文字
$search = '<br>';
$replace = $snipet.$search;
// ソース全体から<br>を探し、置き換える
$source = str_replace($search, $replace, $event->getSource());
$event->setSource($source);*/
}
}

例外を捕まえようとしたのですがうまく行きませんでした。
red
投稿日時: 2016/9/30 11:50
対応状況: −−−
登録日: 2010/2/15
居住地: 東京都
投稿: 1569
Re: 管理画面で例外が発生
The current node list is emptyとありますし、
.item_detail > a が存在するのかを先に調べればいいんじゃないでしょうか


----------------
EC-CUBEのカスタマイズ、トラブル解決承ります
お気軽にお問い合わせ下さい
https://www.ec-cube.net/integrate/partner/partner.php?partner_id=690

h_yamada
投稿日時: 2016/9/30 14:12
対応状況: −−−
新米
登録日: 2016/8/30
居住地:
投稿: 8
Re: 管理画面で例外が発生
ご回答ありがとうございます。
商品マスターに入った時点では、.item_detail > aは存在してないです。
そのため、$crawler->filter('.item_detail > a')のstorageが空の配列で例外が発生しているという状態です。
storageが空かどうかで処理を分けたいのですが、$filter->storageがnullのためどうしたらいいかわからないです。
red
投稿日時: 2016/9/30 15:20
対応状況: −−−
登録日: 2010/2/15
居住地: 東京都
投稿: 1569
Re: 管理画面で例外が発生
$crawler->filter('.item_detail > a')はそれが存在するページでしか使えないので、存在しない場合は呼ばれないようにするしかないと思います
try catchではなく、modeなどで判断すべきかと


----------------
EC-CUBEのカスタマイズ、トラブル解決承ります
お気軽にお問い合わせ下さい
https://www.ec-cube.net/integrate/partner/partner.php?partner_id=690

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1569
9
mcontact
1280
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
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.