0

I created a form which have a lot of images and a delete button on every each one of them. I used ajax to create a callback function which would delete the image. Here is part of my form:

foreach($result as $key=>$some){
    $form['image-entry'][$some->id] = array(
      '#type' => 'fieldset'
    );

    $form['image-entry'][$some->id]['image_' . $some->id] = array(
      '#markup' => theme('image', $variables[$key]),
    );

    $form['image-entry'][$some->id]['description_' . $some->id] = array(
      '#type' => 'textarea',
      '#default_value' => $some->description,
      '#attributes' => array(
        'placeholder' => t('Describe this picture'),
       ),
    );
    $form['image-entry'][$some->id]['submit3' . $some->id] = array(
      '#type' => 'submit',
      '#value' => 'Delete',
      '#ajax' => array(
        'callback' => 'image_gallery_delete_photo_callback',
       ),
    );
   $form['#foo'] = array($some->id);
  }

As you can see I have 3rd submit button which is ajax callback and from example I found out that I need to create a new form element (foo) in this case, which stores some data that I can pass. Everything works like a charm, this is my callback function:

function image_gallery_delete_photo_callback($form, $form_state, $args){
  $arguments = $form['#foo'];
  dpm($arguments);

  /*$photo_delete = db_delete('image_gallery_photos')
                  ->condition('id', $arguments)
                  ->execute();*/
}

I am able to fetch the id of the photo from the form, but here I face a brick wall.

Problem: id is overwritten because it is in a foreach loop, taking it out, doesn't help. It only stores last value from the loop.

How can I get an id of the element selected?

0

I'm sure you can pass some arguments to your callback by doing this:

$form['image-entry'][$some->id]['submit3' . $some->id] = array(
  '#type' => 'submit',
  '#value' => 'Delete',
  '#ajax' => array(
    'callback' => 'image_gallery_delete_photo_callback',
    'parameters'=> array('param1'=>$some->id)
   ),
);

Try to catch those parameters at your function image_gallery_delete_photo_callback($form, $form_state, $args)

The variable $args should contain 'param1'as your ID

Hope it helps !

| improve this answer | |
  • @DarkeK thank you for your answer, but sadly if I try to dpm($arguments) I get nothing back. This is how my callback function looks like: function image_gallery_delete_photo_callback($form, $form_state, $args){ $arguments = $args; dpm($arguments); /*$photo_delete = db_delete('image_gallery_photos') ->condition('id', $arguments) ->execute();*/ } – Viktor Oct 17 '16 at 14:21
  • 2 Things, after you changed the form with my answer, did you clean cache? and second, try to capture the first variable, that means "$args" and also do "var_dump($args); exit();", instead the dmp(); – DarkteK Oct 17 '16 at 22:23
  • I did what you said and after triggering my ajax callback function I get: An AJAX HTTP error occurred. HTTP Result Code: 200 Debugging information follows. Path: /ImgGallery/drupal-7.50/system/ajax StatusText: OK ResponseText: NULL – Viktor Oct 18 '16 at 6:35
  • Remove the Exit(); – DarkteK Oct 18 '16 at 13:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.