2

Symfony 1.4 sfWidgetFormDoctrineChoice を使用しています

モデルデータを正常に取得するフォームにチェックボックスを追加しました。私がやりたいことは、タイトルとともに、チェックボックスの横にサムネイルも含めることです。

$this->setWidget('bulkUploadVideos', new sfWidgetFormDoctrineChoice(array(
    'model' => 'MediaAsset',
    'query' => Doctrine_Query::create()->select('u.url')->from('MediaAsset u')->orderBy('id DESC'),
    'add_empty' => false,
    'multiple' => true,
    'expanded' => true
   )
));

これは、次のように配置されたチェックボックスのリストにクエリをプルするという素晴らしい仕事をします。

⧠ グリーンジーンズ

⧠ マグーさん

⧠ 垂れ下がった

Media Assets テーブルには、レイアウトに含めたい画像の URL もあります。したがって、次のようになります。

|-画像サムネイル- | ⧠ グリーンジーンズ

|-画像サムネイル- | ⧠ マグーさん

|-画像サムネイル- | ⧠ 垂れ下がった

フォーマッタクラスを使っているのではないかと思ったのですが、フォームに変化は見られません。

lib/form/formatters/sfWidgetFormSchemaFormatterAllVideos.class.php

<?php 
class sfWidgetFormSchemaFormatterAllVideos extends sfWidgetFormSchemaFormatter {
  protected
    $rowFormat       = "<span class=\"my-label-class\">%label%</span>\n  <span>%error%%field%%help%%hidden_fields%</span>`n",
    $errorRowFormat  = "<span class=\"my-error-class\" colspan=\"2\">\n%errors%</span>\n",
    $helpFormat      = '<br />%help%',
    $decoratorFormat = "<div class='custom-video-layout'>\n  %content%</div>";
}

そして、これを MediaAssetsForm.class.php の一番下に置きます

public function configure() {
    parent::configure();
...
..
...
$this->getWidgetSchema()->setFormFormatterName('AllVideos');

残念ながら、ページ レイアウトはまったく同じに見えます。Formatter を間違って呼び出していますか、それとももっと簡単な方法がありますか?

ところで、テーブルから各チェックボックスの出力に画像のURLを照会する方法の問題にはまだ答えていません。それが私が解決したい主な問題です。フォーム内の各レコードのサムネイル。

4

1 に答える 1

4

The formatter is used to render the whole form, what you need is to change the rendering of one of the widgets.

The sfwidgetFormDoctrineChoice has an option renderer which takes a formatter as an argument. The one that you need is the sfWidgetFormSelectCheckbox. What I would do is:

  1. create your own class which will extend the sfWidgetFormSelectCheckbox class. E.g.

    class sfWidgetFormMySelectWithThumbs extends sfWidgetFormSelectCheckbox {
    }
    
  2. Extend the configure function so it takes another option which will hold an array of your thumbnails.

    public function configure($options = array(), $arguments = array()) {
        parent::configure($options, $arguments);
    
        $this->addOption('thumbnails', array());
    } 
    
  3. Change the formatChoices function so it adds the image in front of the checkbox (you can copy and modify the original formatChoices function).

    ...
    $sources = $this->getOption('thumbnails');
    ...
    
    $inputs[$id] = array(
        'input' => sprintf('| %s | %s',
            $this->renderTag('img', array('src' => $sources[$key])),
            $this->renderTag('input', array_merge($baseAttributes, $attributes))
        ),
        'label' => $this->renderContentTag('label', self::escapeOnce($option), array('for' => $id)),
    );
    
  4. Use the formatter class in your widget:

     $this->setWidget('bulkUploadVideos', new sfWidgetFormDoctrineChoice(array(
        ...
        'renderer' => new sfWidgetFormMySelectWithThumbs(array('thumbnails' => $thumbanils))
        )
    ));
    

    Of course you need to retrieve the list of thumbnails as an array where the array keys are the same as the id's used for values for the checkboxes, but that shouldn't be an issue.

于 2013-04-15T15:22:59.010 に答える