2010-01-14 4 views
1

나는 generator generator 파일의 옵션을 사용하기 때문에 99 % 작동하는 Symfony 1.4에서 admin generator를 사용하고 있습니다.Symfony admin generator : 디스플레이 열 필터링

문제는 필터를 사용하여 목록보기에 표시되는 열을 지정하려는 것입니다 (generator.yml에서 구성하는 것과 반대).

추가 열 필터 옵션을 표시하기 위해 partial을 성공적으로 만들었지 만이 필터 값을 사용하여 목록에 표시되는 열을 변경하는 방법을 볼 수 없습니다. 값을 사용하여 데이터베이스 쿼리의 기준을 필터링하는 방법을 알 수 있지만이 방법을 사용하여 특정 열의 표시를 제한 할 수는 없습니다.

누구나 아이디어가 있거나 올바른 방향으로 나를 가리킬 수 있다면 가장 좋아할 것입니다. 하루 종일 내 꼬리를 쫓고 있습니다! 미소

많은 감사.

안부,

매트.

답변

0

의견을 보내 주셔서 감사합니다. 내가 가지고있는 문제는 내 사용자 정의 필터의 값에 액세스하여 표시된 열을 변경하는 데 사용할 수있는 문제였습니다.결국, 이것이 내가 이룬 방법입니다.

내 FormFilter 클래스에서 사용자 정의 위젯을 구성하고 유효성 검사기를 추가했습니다. 이로 인해 값을 처리하기위한 메서드 (% sColumnQuery 추가)가 추가되었습니다. 값을 사용자 개체에 추가하여 다른 곳에서 검색하기 위해 값을 저장했습니다. 일반적으로이 메서드는 쿼리를 변경하는 데 사용됩니다. 아래를 참조

 
class ExpenditureFormFilter extends BaseExpenditureFormFilter 
{ 
    public function configure() 
    { 
    parent::configure(); 

    $years = range((int)date("Y", strtotime(sfConfig::get('app_view_min_period'))), (int)date("Y", strtotime(sfConfig::get('app_view_max_period')))); 

    $this->widgetSchema['start_period'] = new sfWidgetFormDate(array(
     'format'  => '%month%/%year%', 
     'can_be_empty' => false, 
     'months'  => array_combine(range(1, 12), array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')), 
     'years'   => array_combine($years, $years) 
    )); 

    $this->widgetSchema->setLabels(array(
     'start_period' => 'Start period', 
    )); 

    $this->validatorSchema['start_period'] = new sfValidatorMonthYear(
     array(
     'min' => strtotime(sfConfig::get('app_view_min_period')), 
     'max' => strtotime(sfConfig::get('app_view_main_period')) 
    ), 
     array(
     'required' => true 
    ) 
    ); 
    } 

    public function getFields() 
    { 
    $fields = parent::getFields(); 
    $fields['start_period'] = 'Date'; 
    return $fields; 
    } 

    protected function addStartPeriodColumnQuery($query, $field, $value) 
    { 
    sfContext::getInstance()->getUser()->setAttribute('start_period', $value); 
    } 
} 

내가 다음 오버라이드 자동 생성 _list_td_tabular.php (쉽게 모듈 템플릿 디렉토리에 같은 이름의 복사본을 생성하여 바로 수행),이 내 나는 사용자가 액세스 할 수 있었던 부분 객체, 따라서 내 필터 값과 같이 : 그래서

 
$start_period = sfContext::getInstance()->getUser()->getAttribute('start_period'); 

지금은 동적 목록 템플릿에 표시 할 열을 생성하기 위해이 값을 사용 할 수 있어요 - 임무 :

을 달성 I가 사랑 물론 더 좋은 방법이 있는지 아세요? 이것은 나를 위해 일한다!

안부,

매트.

0

그런 논리를 구현하려면 자체 생성기를 만들어야한다고 생각합니다.

1

나는 이번 주에이 일을했으며 처음에는 약간의 손실을 보였습니다. 내가 한 일을 말해 줄 수 있고, 당신은 당신의 솔루션에 적응할 수 있습니다. 내 솔루션에는 다음 필드가있는 Notifications라는 모듈이 있습니다. id, content, state, sent_at, instance, created_at. 내 문제는 알림이 사용자 목록에 전송 될 수 있으므로 사용자가 알림 데이터에 저장하지 않고 데이터를 전달하는 것입니다 (1 ~ n 관계). 따라서 알림을 만들 때 알림을 만들 때 (예 : 콘텐츠 및 인스턴스) 알림과 같은 다른 필드는 편집 할 수 없습니다 (본인의 선택). 그래서 나는 6 개의 필드 중 2 개만 보여줍니다. 또한 다중 선택하는 사용자 목록을보고 싶습니다. 그래서 "_get_all_users_list.php"라는 템플릿 폴더에있는 부분을 사용합니다.이 폴더에는 조건이 있으며 다중 선택 태그가 반환됩니다.

_get_all_users_list.php 파일

<?php 

    echo select_tag('users', objects_for_select(UserPeer::doSelect(new  Criteria),"getId","getUsername") 
      ,array("multiple"=>1, "size"=>15) ); 
?> 

그리고 내가 이렇게하려면 generator.yml에있는 사용자의 목록을 표시 할 수 있도록 :

generator: 

클래스 : sfPropelAdminGenerator PARAM : model_class : 알림 주제 : 기본값

list: 
    title:   Notificaciones 
    max_per_page: 20 
    display:  [ id, content, state, sent_at, sknow_instance, created_at] 
    object_actions: 
    _edit:   ~ 
    _delete:  ~ 
    batch_actions: 
    _delete:  ~ 

edit: 
    title:   Modificar notificacion: 
    display:  [content, sknow_instance, _getAllUsersList ] 
    fields: 
    content:    { name: Notification content, type: textarea_tag, params: size=80x5 } 
    get_all_users_list: { name: Select one or more users to be notified} 

편집시 generator.yml의 "display :"영역에 표시된대로 작성시 편집 가능/활성화 할 필드를 선언 할 수 있으며 부분을 포함 시키려면 a로 선언해야합니다 _ 및 시작 부분에 camelCase 형식으로 표시되며 부분 이름은 _로 시작해야하며 이름은 _로 구분해야합니다.

나는 나의 영어에 대해이 심포니의 책 내가 도움이 희망 Admin Generator

의 장, 미안 매우 유용하다고.

관련 문제