Pomoc ohledně checkboxlistu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
wicked
Člen | 290
+
0
-

Kluci, prosím jak mám postupovat?

Blbý dotaz, ale jak funguje checkboxlist? Respektivě přístup k položkám?

Mějme formulář, který obsahuje checkboxlist:

public function createComponentPokus() {
        $form = new Nette\Application\UI\Form();
        $form->addText('tagline', 'Tagline:');
        $form->addCheckboxList('active_sites', 'Vložené ikony', array(
            'Facebook' => 'Facebook',
            'Facebook Counter' => 'Facebook Counter',
            'Myspace' => 'Myspace',
            'Twitter' => 'Twitter',
            'Twitter Counter' => 'Twitter Counter',
            'LinkedIn' => 'LinkedIn',
            'LinkedIn Counter' => 'LinkedIn Counter',
            'Delicious' => 'Delicious',
            'Digg' => 'Digg',
            'Digg Counter' => 'Digg Counter',
            'Reddit' => 'Reddit',
            'StumbleUpon' => 'StumbleUpon',
            'StumbleUpon Counter' => 'StumbleUpon Counter',
            'vuible' => 'vuible',
            'vuible Counter' => 'vuible Counter',
            'Google Bookmarks' => 'Google Bookmarks',
            'Google +' => 'Google +',
            'HackerNews' => 'HackerNews',
            'MSNReporter' => 'MSNReporter',
            'BlinkList' => 'BlinkList',
            'Sphinn' => 'Sphinn',
            'Posterous' => 'Posterous',
            'Tumblr' => 'Tumblr',
            'email' => 'email',
            'Google Reader' => 'Google Reader',
            'Add to favorites' => 'Add to favorites',
            'More' => 'More'));
        $form->addSubmit('send', 'Přidat úlohu');

        $form->onSuccess[] = $this->processingSociableOptions;
        return $form;
    }

A následně potřebuji uložit do DB to, když je box zaškrtnutý aby ulozilo jeho nazev ⇒ on

Snad je to nějak srozumitelné …

Kdyz provedu ve zpracovani fomulare v array foreach hodi to chybu .. jak se dostanu jenom k nazvum zaskrnutého inputu?

Ja uz fakt nejak nevim …

Filip Klimeš
Nette Blogger | 156
+
0
-

viz phpfashion

public function processingSociableOptions($form, $values)
{
	foreach($values->active_sites as $key => $name) {
		// insert do DB
	}
}
wicked
Člen | 290
+
0
-

To mě taky napadlo, jenže nějak mě to zlobilo …

Tahle vypada processing

private function processingSociableOptions(ArrayHash $values) {
        $originOptions = unserialize($this->service->getOption('sociable_options'));

        $options = [
        'pixel' => "",
        'blogplay_tags' => 1,
        'version' => '4.3.2',
        'automatic_mode' => 'on',
        'tagline' => $values->tagline,
        'custom_image_directory' => '',
        'use_stylesheet' => 'on',
        'use_images' => 'on',
        'use_alphamask' => 'on',
        'new_window' => 'on',
        'help_grow' => '',
        'locations' => array(
        'is_single' => 'on',
        'is_page' => 'on'
        ),
        'active_sites' => // zde prave potrebuji mit facebook => on, twitter => on atd
		'icon_size' => '32',
        'icon_option' => 'option1',
        "active" => 1,
        'linksoptions' => ''
        ];
        return serialize($options);

Tahle maji delanou DB (je to update pro pluginy wordpressu)

No a ja nevim jak to tahle dostat … repsktive jsem vse zkousel a nic me neslo …

Jan Endel
Člen | 1016
+
0
-

pro začátek ta metoda musí být public a ne private jak ji máš ty.

wicked
Člen | 290
+
0
-

To právě nemusí :)

Tohle není můj projekt, jen jej upravují a věci, které tam jsou, jsou funkční, taky jsem si myslel, že bez public to nepojede, avšak opak je pravdou.

Jan Endel
Člen | 1016
+
0
-

Pokud to nebude public, tak se ti ten callback ve zpracování formu nezavolá, to nemá nic společného s tvým projektem.

David Matějka
Moderator | 6445
+
0
-

@JanEndel taky me to prekvapilo, ale asi opravdu muze byt public, https://github.com/…Callback.php#…

wicked
Člen | 290
+
0
-

Tady přidávám funkci, která tam již je a funguje …

   private function setupDisableComments(UI\Form $form) {
       $form->addGroup('Plugin Disable Comments');
       $form->addRadioList('mode', null, [
                   'remove_everywhere' => 'Everywhere',
                   'selected_types' => 'On certain post types',
               ])
               ->setDefaultValue('remove_everywhere')
               ->setAttribute('data-id', 'mode');

       $form->addCheckboxList('disabled_types', null, [
                   'post' => 'Příspěvky',
                   'page' => 'Stránky',
                   'attachment' => 'Mediální soubory',
               ])
               ->setAttribute('data-disabled')
               ->setAttribute('data-values', 'mode');

       $form->addCheckbox('permanent', 'Použít persistentní mód')
               ->setDefaultValue(true)
               ->setOption('description', 'Toto provede trvalé změny v databázi - komentáře zůstanou zavřené, i když později plugin zakážete!');
   }

   /**
    * @param \Nette\Utils\ArrayHash $values
    * @return string
    */
   private function processingDisableComments(ArrayHash $values) {
       $everywhere = $values->mode === 'remove_everywhere';

       $options = [
           'remove_everywhere' => $everywhere,
           'disabled_post_types' => ($everywhere ? ['post', 'page', 'attachment'] : array_values($values->disabled_types)),
           'permanent' => $values->permanent,
           'db_version' => 5,
       ];

       return serialize($options);
   }

private function processingPlugins(ArrayHash $values) {
       $options = [];

       if ($values->sociable) {
           $options[] = 'sociable/sociable.php';
       }
       if ($values->all_in_one_seo_pack) {
           $options[] = 'all-in-one-seo-pack/all_in_one_seo_pack.php';
       }
       if ($values->disable_comments) {
           $options[] = 'disable-comments/disable-comments.php';
       }
       if ($values->disable_feeds) {
           $options[] = 'disable-feeds/disable-feeds.php';
       }
       if ($values->instant_breadcrumbs) {
           $options[] = 'instant-breadcrumbs/instant-breadcrumbs.php';
       }
       if ($values->yet_another_related_posts_plugin) {
           $options[] = 'yet-another-related-posts-plugin/yarpp.php';
       }

       return serialize($options);
   }

Takže funguj private funkce … coz o to, me ta funkce take funguje … jen potrebuji jako vystup z toho checkbox listu mit

obsahTagline, a pro activate_sites Facebook => on, Twitter => on atd podle zaskrtnutych checkboxu