エラーに関して Call to a member function setBlockObject() on a non-object

2016年1月28日 at 15:15

いくつかのページにて件名のエラーが出て、追加したブロックをアンインストールしてみたりしましたが解決できません…

本家フォーラムにて同じ内容の投稿を見つけたのですが、ここでも解決策は書かれておりませんでした
http://www.concrete5.org/community/forums/usage/error-acured-when-editing-a-block./#796828

どうにか、エラーの原因を知ることだけでもできないでしょうか。
ページを作りなおすしかないのでしょうか…
よろしくお願いいたします。

エラーログ、環境は下記です。

ログ
Exception Occurred: /usr/local/www/apache24/data/concrete5/updates/concrete5.7.5.6/concrete/blocks/core_area_layout/controller.php:64 Call to a member function setBlockObject() on a non-object (1)

環境
# concrete5 Version
Core Version - 5.7.5.6
Version Installed - 5.7.5.4
Database Version - 20151221000000

タグ:

Re: エラーに関して Call to a member function setBlockObject() on a non-object

2016年1月31日 at 19:14
先日の大阪セミナーにてKatzさんにお答えいただきました。

使用していたカスタムレイアウトプリセットを消してしまっていたことが原因だった様です。

ありがとうございました。
 

Re: エラーに関して Call to a member function setBlockObject() on a non-object

2016年2月3日 at 11:18
すみません。またこのエラーが発生してしまいました。

今回、カスタムレイアウトプリセットは変更していないのですが…
ページを復旧することは難しいでしょうか…

どなたかご存知の方がいらっしゃいましたら、ご教示ください。

page_theme.php の中身は下記です。

<?php
namespace Application\Theme\○○○;

use Concrete\Core\Page\Theme\Theme;
use Concrete\Core\Area\Layout\Preset\Provider\ThemeProviderInterface;
class PageTheme extends Theme implements ThemeProviderInterface
{
public function registerAssets() {
$this->providesAsset('javascript', 'bootstrap/*');
$this->providesAsset('css', 'bootstrap/*');
$this->requireAsset('javascript', 'jquery');
$this->requireAsset('css', 'font-awesome');
}

protected $pThemeGridFrameworkHandle = 'bootstrap3';

public function getThemeBlockClasses()
{
return array(
'content' => array(
'product-table',
),
);
}

public function getThemeAreaLayoutPresets()
{
$presets = array(
array(
'handle' => 'xs12_sm4',
'name' => 'xs1col sm3col',
'container' => '<div class="row"></div>',
'columns' => array(
'<div class="col-xs-12 col-sm-4 mb20"></div>',
'<div class="col-xs-12 col-sm-4 mb20"></div>',
'<div class="col-xs-12 col-sm-4 mb20"></div>'
),
),
array(
'handle' => 'xs12_sm6',
'name' => 'xs1col sm2col',
'container' => '<div class="row"></div>',
'columns' => array(
'<div class="col-xs-12 col-sm-6 mb20"></div>',
'<div class="col-xs-12 col-sm-6 mb20"></div>'
),
)
);
return $presets;
}

}
 

Re: エラーに関して Call to a member function setBlockObject() on a non-object

2016年2月3日 at 12:15
エラーがでる直前に変更した部分は何ですか?
 

Re: エラーに関して Call to a member function setBlockObject() on a non-object

2016年2月3日 at 13:21
aclissさん

ご返答いただきありがとうございます。

作業を複数人でやっているため、直前に編集していた者に確認したところ。

エラーの出たページにて編集モード中に画像ブロックを追加しようとしたところ、ブラウザが読み込み中のままになる。

保存、公開せずに管理画面をクリックし、サイトマップから別ページへ移動。

を数回行った様です。これが原因ですかね…

これが原因だったとして、もし編集モードでブラウザが読み込み中から動かなくなった場合はどのように対応するのが安全なのでしょうか。
ブラウザをそのまま閉じる? 読み込み中止、再読み込みをする?


ひとまず、PCの挙動がおかしかったので、そのPCからの編集は止めています…。
 

Re: エラーに関して Call to a member function setBlockObject() on a non-object

2016年2月4日 at 23:46
Shu さん。

何か、Javascript のエラーや、concrete5 の他の部分でが発生しているかもしれません。

今のブラウザにはデベロッパーツールがほぼ標準で入っていて、
それを起動すると、Javascript のエラーなどを表示してくれます。

画像ブロックで何かエラーが発生しているかもしれません。

あと、サーバーのエラーログも確認できると、なにかが見えるかもしれないです。

取り急ぎ。
 

Re: エラーに関して Call to a member function setBlockObject() on a non-object

2016年2月5日 at 10:14
Katz さん

ご返信ありがとうございます。

なるほど、PCを変えてからは発生していないようなので、
エラー確認しつつ作業したいと思います。

何かわかれば、また投稿させていただきます。
ありがとうございました。
 

Re: エラーに関して Call to a member function setBlockObject() on a non-object

2016年9月20日 at 13:07
進展がありましたので、ご報告させていただきます。
本家フォーラムに同じエラーの解決方法の投稿があったため、
試したところ解決しました。

http://www.concrete5.org/community/forums/5-7-discussion/call-to-a-member-function-setblockobject-on-a-non-object


行った内容を残しておきます。

/application/blocks/core_area_layout ディレクトリを作成しその中に
下記内容の controller.php と view.php を作成しました。

【controller.php】

<?php
namespace Application\Block\CoreAreaLayout;
use Concrete\Core\Area\Layout\Layout as AreaLayout;
class Controller extends \Concrete\Block\CoreAreaLayout\Controller {
public function getAreaLayoutObject()
{
if ($this->arLayoutID) {
$arLayout = AreaLayout::getByID($this->arLayoutID);
$b = $this->getBlockObject();
if (is_object($arLayout) && is_object($b)) {
$arLayout->setBlockObject($b);
}
return $arLayout;
}
}
}


【view.php】

<?php
defined('C5_EXECUTE') or die("Access Denied.");
$a = $b->getBlockAreaObject();
if(isset($formatter)) {
$container = $formatter->getLayoutContainerHtmlObject();
foreach($columns as $column) {
$html = $column->getColumnHtmlObject();
$container->appendChild($html);
}
print $container;
}
 

Re: エラーに関して Call to a member function setBlockObject() on a non-object

2016年9月23日 at 11:47
ありがとうございました!
 

Re: エラーに関して Call to a member function setBlockObject() on a non-object

2016年11月20日 at 9:39
同じエラーが出てこちらのページを参考にさせていただいたら直りました!
情報共有ありがとうございます。
助かりました。

直前に行った作業は、ファイルマネージャーで画像の入れ替えを数件行ったのと、自動実行ジョブで古いページバージョンの削除で、この削除が進まずなぜか止まってしまいました。