Google

Kategorie

Reprezentacja Wiedzy

Kalendarz

September 2007
M T W T F S S
« Aug   Dec »
 12
3456789
10111213141516
17181920212223
24252627282930

Zapisywanie wielu rekordów w CakePHP

September 18th, 2007 by prond

Byłem ostatnio zmuszony do zbudowania w CakePHP aplikacji,
która miałaby pozwalać na masową edycję stron, produktów, etc.

Szperając na blogach i forach nie udało mi się jednak znaleźć rozwiązania,
które pozwalałoby jednocześnie korzystać ze wszystkich udogodnień CakePHP.

Po paru eksperymentach udało mi się zneleźć dość satysfakcjonujące rozwiązanie.
Przynajmniej nadal mogę korzystać z takich ‘automagicznych’ elementów jak
walidacja i helpera do formularzy.

Kontroler : controllers/pages_controller.php

function addMany($count = 2) {
    for ($i=1;$i<=$count;$i++) {
        $modelName = "Page{$i}";
        $this->{$modelName} = & new Page;
        $this->{$modelName}->useTable = "page";
        $this->{$modelName}->name = $modelName;
        ClassRegistry::addObject("Page{$i}",$this->{$modelName});
    }
 
    if (!empty($this->data)) {
        for ($i=1;$i<=$count;$i++) {
            $modelName = "Page{$i}";
            $this->{$modelName}->create($this->data);
            $this->{$modelName}->save();
        }
    }
 
    $languages = $this->Page->Language->generateList();
 
    $this->set('count',$count);
    $this->set(compact('languages'));
}

Widok : views/pages/add_many.php

    <div class="page">
    <form action="" method="post">
    <?php for ($i=1;$i<=$count;$i++) : ?>
        <fieldset>
            <legend><?php __('Add');?> <?php __('Page');?></legend>
        <?php
            echo $form->input("Page{$i}.language_id");
            echo $form->input("Page{$i}.name");
            echo $form->input("Page{$i}.urn");
            echo $form->input("Page{$i}.description");
            echo $form->input("Page{$i}.keywords");
            echo $form->input("Page{$i}.published_from");
            echo $form->input("Page{$i}.published_to");
            echo $form->input("Page{$i}.published");
            echo $form->input("Page{$i}.contents");
        ?>
        </fieldset>
    <?php endfor; ?>
    <?php echo $form->end('Submit');?>
    </div>
    <div class="actions">
        <ul>
            <li><?php echo $html->link(__('List', true).' '.__('Pages', true), array('action'=>'index'));?></li>
            <li><?php echo $html->link(__('List', true).' '.__('Languages', true), array('controller'=> 'languages', 'action'=>'index')); ?> </li>
            <li><?php echo $html->link(__('New', true).' '.__('Language', true), array('controller'=> 'languages', 'action'=>'add')); ?> </li>
        </ul>
    </div>

Posted in CakePHP | 15 Comments »