2016-07-05 1 views
0

管理コンソールでGridFieldを作成するとすべてが正常です - Memberメソッド:: get() - またはArrayList経由でgridfieldに取り込みます -public function getCMSFieldsでない場合、GridfieldにArrayListが設定されていません

- 形で提示 - - - 何とか第二の方法。私は、ユーザーのページにGridFieldを作成しようと
$al1 = new ArrayList(); 
$records = DB::query("SELECT * from Member where id<10"); 
while ($rec = $records->next()) { 
    $al1->push(new ArrayData($rec)); 
}  
$grid = new GridField('Pages', 'All pages', $al1) 

どちらの方法でも、 しかし、[OK]を働いている。(GridFieldは、ArrayListのが移入されなければならない - 動作していない)

$gridField = new GridField('pages1', 'All pages1', Member::get(), $config); 

- woks okですが、m [

:私は取得していますエラーがある

return new Form($this, "AllSubmissions", new FieldList($gridField), new FieldList()); 

:私はgridfieldをレンダリングしようとしたとき、私はを通じてエラーを取得する

$al = new ArrayList(); 
$records = DB::query("SELECT * from Member where id<10"); 
while ($rec1 = $records->next()) { 
    $al->push(new ArrayData($rec)); 
} 

:私はArrayListの昔ながらの方法を作成ethod ArrayData :: __ construct()GET/ss340/gridfield-test/gridfield-underr-grid/Line 27(C:\ wamp \ www \ ss340 \ framework \ view \ ArrayData.php)の引数1がありません

管理者以外のページにグリッドフィールドを設定するために外部データベースのデータが必要なので、私はこれを解決するために絶望的です。 誰かがSilverstripeで表形式のデータを表示/編集するための代替方法を提供できる場合は、非常に感謝しています。

答えて

1

エラーを参照しました。あなたはArrayDataのシングルトンを作成しようとしている、それにArrayDataとのArrayListを与えている場合

public function getDisplayFields($gridField) { 
    if(!$this->displayFields) { 
     return singleton($gridField->getModelClass())->summaryFields(); 
    } 
    return $this->displayFields; 
} 

:それは、この機能を使用しようとgridfieldから来ています。これは、ArrayDataがオブジェクトまたは配列を必要とするため、エラーが発生します。

私の回答はまだ私の古い答えを使用している、これはあなたにDataListを与えるだろう、あなたはトラブルを通過する必要はありません。

旧回答なぜ、すべての問題を通過し、ちょうどSearchFiltersでSilverStripeのORMを使用することではありませんか?

​​

最後の1ノート。 「開発中」の場合は、SilverStripeを「devモード」にすることをお勧めします。コメントでは、SilverStripeがdevモードでないことを示すServer Error(500)が表示されているか、またはerror_reportingが有効になっていないとします。たぶんthisあなたがそれを行うのに役立つ可能性があります。あなたが投稿エラーから

+0

私はあなたの努力を感謝します - しかし、私は外部DBからのデータでGridFieldを設定したいので、私はORMメソッドを使用することはできません。私はerror_reportingをオンにし、エラーについての答えを投稿しました。しかし、それでも私は管理セクションのグリッドフィールドに古典的なメソッドを実装することはできますが、ユーザーセクションには配置できません。よろしくご回答ください – Grega

+0

あなたのために私の答えを更新しました。コードを使用すると、データベースを切り替えることができます。 –

0

OK、:

* var array 
* see ArrayData::_construct()/protected $array; 
/* 
* @param object|array $value An associative array, or an object with simple properties. 
* Converts object properties to keys of an associative array. 
*/ 
public function __construct($value) { 
    if (is_object($value)) { 
     $this->array = get_object_vars($value); 
    } elseif (ArrayLib::is_associative($value)) { 
     $this->array = $value; 
    } elseif (is_array($value) && count($value) === 0) { 
     $this->array = array(); 

このエラーは不完全に見えますが、私はあなたの提出のコードに気づいです:

$al = new ArrayList(); 
$records = DB::query("SELECT * from Member where id<10"); 
while ($rec1 = $records->next()) { 
    $al->push(new ArrayData($rec)); 
} 

しかし$recが定義されていないので、おそらく、あなたはそうではありませんされ有効なコンストラクタ引数をnew ArrayData()に渡します。

try:

$al = new ArrayList(); 
$records = DB::query("SELECT * from Member where id<10"); 
while ($rec = $records->next()) { 
    $al->push(new ArrayData($rec)); 
} 
+0

ありがとうございました - 私はエラーrec1 <> recに気付きました。しかし、あなたが指定したコードであっても、エラーは残ります。警告は次のようになります。[警告] ArrayData :: __ construct()の引数1がありません。外部DBへの接続と同様に、外部DBのメンバーテーブルはクラスではないので、Member :: get() - を使用することはできません。よろしく、GRega – Grega

+0

私は外部のDBに接続する方法を知っています - しかし、そのデータベース内のテーブルはクラスではなく、私はそれらをORMメソッドで照会できません。 – Grega

+0

エラーは、配列データコンストラクタに引数がないことです。コンストラクタに何も渡していないということです。あなたのvarが空であるか、あなたが私たちに表示されていない文法エラーがあります –

関連する問題