Zend Framework 1.6 a moje zkušenosti s Dojo TabContainer

Zrovna dělám na jednom malém projektu, který jsem hned začal psát zrovna jak vyšel ZF 1.6, celkem standardní věci až na to, že jsem potřeboval rozdělit formulář na více stránek a udělat záložky.

Postupoval jsem podle manulálu, vyvořil jsem si formulář se subformy a celkem to dobře funguje. Potom když jsem potřeboval rozbrazit záložky narazil jsem na několik problémů se kterými jsem si různě poradil.

Takto vypadají záložky pomocí Dojo frameworku.

Nejdříve byl problém přidat záložku kde byl jen text. Tak jsem vytvořil vlastní element a ten potom vracel jen co jsem do něj napsal za text. Dalším problémem byl konec fomuláře jak je vidět na obrázku tak špatně uzavíral a číst ho mizela.

To jsem opravil tak, že jsem celou strukturu záložek přesunul do View.

<?php echo $this->form; ?>

jsem musel udělat

<?php
$this->dojo()->enable();

echo "<form method='".$this->form->getMethod()."' enctype='application/x-www-form-urlencoded' >";

// Container with tabs
$this->tabContainer()->captureStart('tab1', array(), array('style' => 'width:950px;height:800px;'));

    // First tab "Dates"
    $this->contentPane()->captureStart('pane1', array(), array('title' => 'Vstupní evidence'));
        echo $this->form->getSubform('page1');
    echo $this->contentPane()->captureEnd('pane1');

    // Second tab "FAQ"
    $this->contentPane()->captureStart('pane2', array(), array('title' => 'Příprava rozpočtu'));
      echo $this->form->getSubform('page4');     
    echo $this->contentPane()->captureEnd('pane2');

    // Third tab "Closable"
    $this->contentPane()->captureStart('pane3', array(), array('title' => 'Podání projektu'));
        echo $this->form->getSubform('page2');
    echo $this->contentPane()->captureEnd('pane3');

    // Fourth tab "Splitted"
    $this->contentPane()->captureStart('pane4', array(), array('title' => 'Realizace projektu'));
      echo $this->form->getSubform('page3');
    echo $this->contentPane()->captureEnd('pane4');

echo $this->tabContainer()->captureEnd('tab1');

echo $this->form->submit;

echo "</form>"
?>

 

Je to složitější ale všechno vypadalo jak mělo, jen byl problém s poslední stranou formuláře. Je tam málo položek a tabContainer se neumí přizpůsobit výšce vloženého obsahu. To se mi nepodařilo vyřešit jinak než nahradit Dojo jQuery UI, který jsem byl zvyklý používat doteď.

  <script>
  $(document).ready(function(){
    $("#example > ul").tabs();
  });
  </script>
<?php
foreach ($this->notice as $n) {
    echo '<div class="error">'.$n . '</div>';
}
echo "<form method='".$this->form->getMethod()."' enctype='application/x-www-form-urlencoded' >";

// Container with tabs
?>
  <div id="example" class="flora">
            <ul>
                <li><a href="#page-1"><span>Vstupní evidence</span></a></li>
                <li><a href="#page-2"><span>Příprava rozpočtu</span></a></li>
                <li><a href="#page-3"><span>Podání projektu</span></a></li>
                <li><a href="#page-4"><span>Realizace projektu</span></a></li>
            </ul>
            <div id="page-1">
            <?php echo $this->form->getSubform('page1'); ?>
            </div>
            <div id="page-2">
            <?php
                  echo "<div style='padding:1em;'>";
                  include("../application/views/scripts/index/rozpocet.phtml");
                  echo "</div>";
            ?>
            </div>
            <div id="page-3">
            <?php echo $this->form->getSubform('page2'); ?>
            </div>
            <div id="page-4">
            <?php echo $this->form->getSubform('page3'); ?>
            </div>
        </div>
<?php
echo $this->form->submit;
echo "</form>";

?>

 

Po úpravě stylu to vypadá jinak, ale je to funkční jak chci a přesně kopíruje rozměry formuláře. 

Přijde mi, že v Dojo je spousta jednoduchých věcí jako jsou třeba ty taby zatím celkem nedotažené. Co si myslíte o té integraci ZF s Dojo?