راهنمایی برای نمایش زیرمجموعه

[font="Tahoma"][rtl]با سلام

در پروژه من قسمتی وجود دارد که تمامی کاربران را نشان می دهد و هر کاربری یه سری زیر مجموعه دارد من میخواهم جوری باشه که در صفحه اول تمامی کاربران رده اول را نشان دهد و روی هر کاربر level1 که کلیک میکنیم زیر مجموعه آن را نشان دهد درست چیزی شبیه TbRelationalColumn در بوستر که در لینک زیر میتوانید مشاهده نمایید:

http://yiibooster.clevertech.biz/extendedGridView

من از نمونه کد لینک بالا استفاده کردم ولی متآسفانه برای من اصلا کار نمیکنه لینکی ایجاد میشود که بخواهیم روش کلیک کنم و زیرمجموعه اش رو ببینم. فقط یه سری از نام های کاربری کاربران رده اول رو بهم نشون میده. ممنون میشم اگه راهنمایی کنید منو. [/rtl][/font]

[font="Tahoma"][rtl]در قسمت زیر هم کدهای مربوط به view رو گذاشتم:[/rtl][/font]




<?php

$this->widget('booster.widgets.TbExtendedGridView', array(

    'filter'=>$person,

    'type'=>'striped bordered',

    'dataProvider' => $dataProvider,

	'template' => "{items}{pager}\n{extendedSummary}",

    'columns' => array(

        array(

			'header' => '',

			'value' => '$this->grid->dataProvider->pagination->offset + $row+1', // row is zero based

		),

        array(

            'class'=>'booster.widgets.TbRelationalColumn',

            'name' => 'username',

            'url' => '$this->createUrl("/admin/relational")',

            'value' => '$data->username',

            'afterAjaxUpdate' => 'js:function(tr,rowid,data){

                alert(rowid);

            }'

        ),

	),

));

?>



[right]سلام

میتونی به جای بوستر از

jquery dialog و ajax

استفاده کنی.

لینک زیر در حد ایده گرفتن هست . من خودم با

jquery dialog

نوشتم و درست هم کار میکنه

امیدوارم بهت کمک کنه[/right]My link

[font="Tahoma"][rtl]اولا فکر میکنم ستون لینکت باید اینطور باشه[/rtl][/font]

[PHP]

array(

'class'=&gt;'bootstrap.widgets.TbRelationalColumn',


'url' =&gt; &#036;this-&gt;createUrl('admin/relational'),//you inserted an aditional '/' at the begining


'value'=&gt; '&quot;load &quot;.&#036;data-&gt;username.&quot; levels&quot;',//any value

),

[/PHP]

[rtl][font="Tahoma"]و حتما هم اکشن relational رو تو کنترلر admin ایجاد کردی و یه view برای رندر کردن خروجی اون هم درست کردی دیگه اگه فکر می کنی مشکل از این اکشن یا ویو اون هست اون ها رو هم بزار بررسی کنیم[/font][/rtl]

[font="Tahoma"][rtl]سلام، من تونستم از این booster استفاده کنم ولی تنها مشکلی که هست اینه که من میخوام یه مقداری رو به تابع relational در کنترلر بفرستم[/rtl]


$this->widget('booster.widgets.TbExtendedGridView', array(

    'type' => 'striped bordered',

    'dataProvider' => $dataProvider,

    'template' => "{items}",

    'columns' => array_merge(array(

        array(

			'header' => '',

			'value' => '$this->grid->dataProvider->pagination->offset + $row+1', // row is zero based

		),

        array(

			'class' => 'booster.widgets.TbRelationalColumn',

            'name' => 'username',

            'value' => '$data->username',

			'url' => $this->createUrl('/user/admin/relational?username='.$data->username),

        ),

	), $gridColumns),

));

[rtl]میخوام مقدار username که لینک روش میشه و زیر مجوعه رو نشون میده رو بفرستم به کنترلر. ولی مقدار $data->username وقتی میره به کنترلر خالی هست. اگه یه مقدار استاتیک بفرستم با موفقیت به کنترلر فرستاده میشه ولی این نمیشه.[/rtl][/font]

[rtl]

عجیبه که خطایی نگرفتین !

متغیر $data اینجا اصن تعریف نشده که بخواد پارامتر username شو بگیره :D

مقداری که برای URL نوشتین باید کاملا String باشه مثل زیر

[/rtl]


  'url' => "$this->createUrl('/user/admin/relational',array('username'=>$data->username))"

[rtl]

ولی اگه سورس کد این کلاس رو چک کنید میبینین که یه پارامتر داره به اسم submitData (داخل داکیومنتای Yiibooster بهش اشاره نشده… مثل خیلی چیزای دیگه که اشاره نشده و باید توی سورس کدش پیدا کنید) که کارش اینه که مقدار اضافه رو براتون بفرسته سمت سرور :)

کدتونو به این شکل تغییر بدین،

[/rtl]




array(

	'class' => 'booster.widgets.TbRelationalColumn',

	'name' => 'username',

	'value' => '$data->username',

	'url' => $this->createUrl('/user/admin/relational),

	'submitData'=>array('username')

),



البته بگم من کار نکردم با این کلاس و ممکنه اشتباه باشه کدی که نوشتم :-/

[font="Tahoma"][rtl]ممنون از پاسختون. ولی مشکل من هنوز پابرجاست با این راه حل هم. مقدار username فرستاده نمیشه یا خالی هست یا خود کلمه username رو نوشته.[/rtl]


 array(

			'class' => 'booster.widgets.TbRelationalColumn',

            'name' => 'username',

            'value' => '$data->username',

			'url' => $this->createUrl('/user/admin/relational'),

			'submitData'=>array('attribute'=>'username'),

        ),

[rtl]و در کنترلر در تابع relational هم دارم:[/rtl]


$username = Yii::app()->getRequest()->getParam('attribute');

[rtl]مقدار username به کنترلر فرستاده نمیشود.[/rtl][/font]

[size=2]اگه بنویسی [/size][size=2]


'submitData'=>array('attribute'=>'$data->username'),

چطور؟ [/size]

[rtl]اینم جواب نمیده [/rtl] :(

[rtl]خوب نگا کردم فایلشو دوبارهاصن نداره همچین چیزی! :D

نمیشه، باید خودت براش بنویسیاین کلاس فعلا فقط با PrimaryKeys کار میکنه و امکان انجام مانور دیگه ای ندارهمیتونی توابع renderDataCell و registerClientScript رو ویرایش های لازمه رو روشوون انجام بدی تا به نتیجه مطلوب و دلخواهت برسی

البته بگم صحیحش اینه ویرایش نکنی، یه کلاس دیگه بسازی که از کلاس TbRelationalColumn ارث ببره و این دو تابع رو Override کنی :)[/rtl]