These are chat archives for dru-io/Drupal

5th
Nov 2016
Airat
@codev0
Nov 05 2016 09:34

привет :)
подскажите как засунуть в страницу и форму и контент через hook_menu?

$items['admin/config/system/sl-calc-kz/add'] = array(
        'title' => 'Add city',
        'page callback' => 'drupal_get_form',
        'page arguments' => array('sl_kz_calc_city_form', 5),
        'access arguments' => array('administer menu'),
        'type' => MENU_LOCAL_TASK,
        'weight' => 5,
    );

в гугл не ходил, тк хз как правильно сформулировать мысль.

KarmaBot
@KarmaBot
Nov 05 2016 09:34
Не узнал тебя, @codev0. Богатым будешь :)
boolboost
@boolboost
Nov 05 2016 09:52
page callback задай
Ну а вней можно например сразу вернуть что то типо такого
return render(drupal_get_form()) . $content;
Airat
@codev0
Nov 05 2016 10:13
function sl_kz_add_city_page() {
    $array = array('result' => 'result');

    return render(drupal_get_form('sl_kz_calc_city_form')) . $array;
}
типа того?
Notice: Only variables should be passed by reference в функции sl_kz_add_city_page() (строка 81 в файле /Users/codev0/projects/mamp/spark.dev/sites/all/modules/custom/sl_kz_calc/sl_kz_calc.module).
Notice: Array to string conversion в функции sl_kz_add_city_page() (строка 81 в файле /Users/codev0/projects/mamp/spark.dev/sites/all/modules/custom/sl_kz_calc/sl_kz_calc.module).
правда так ругается, не пойму что хочет
boolboost
@boolboost
Nov 05 2016 10:14
Так ты определись что ты возвращаешь
Массив или строку)
Airat
@codev0
Nov 05 2016 10:14
для примера сунул, в идеале таблицу
boolboost
@boolboost
Nov 05 2016 10:15
render отдаёт строку
$array - это рендер массив?
Если да тогда тоже оберни есть в render и будет работать
Airat
@codev0
Nov 05 2016 10:18
return theme('links',
        array('links' => $linklist, 'attributes' => array('class' => array('links')))
    );
типа того будет
убрал массив пока, добавил строку. Осталась ошибка
Notice: Only variables should be passed by reference в функции sl_kz_add_city_page() (строка 81 в файле /Users/codev0/projects/mamp/spark.dev/sites/all/modules/custom/sl_kz_calc/sl_kz_calc.module).
boolboost
@boolboost
Nov 05 2016 10:20
Покажи весь код
Ааа
Я туплю))
Нужно render в качестве аргументов ест только перемменные
boolboost
@boolboost
Nov 05 2016 10:25
return render(drupal_get_form('sl_kz_calc_city_form')) . $array;
return render($form) . render($array);
Типо такого
Airat
@codev0
Nov 05 2016 10:36
@boolboost спасибо
KarmaBot
@KarmaBot
Nov 05 2016 10:36
Спасибо (+1) для @boolboost принято! Текущая карма +28.
Airat
@codev0
Nov 05 2016 10:36
все рабоатет
bumble
@awd-studio
Nov 05 2016 16:14
привет всем!
Ребят, кто шарит по рендер-массивам (в 7ке)?
чтоб элемент был <section>, а не <div> - реально без объявления своего _element_info?
(ЗЫ - не #prefix/#suffix)
KarmaBot
@KarmaBot
Nov 05 2016 16:14
Приветствую тебя, @awd-studio!
Alexander Dubovskoy
@adubovskoy
Nov 05 2016 16:21
вот может чем поможет пример
// add a wrapper around this field and add a attribute class correspond to the ID attribute
function MY_THEME_form_element($vars) {
  $original = theme_form_element($vars);
  if('YOUR_FIELD_NAME' === $vars['element']['#name']){
    return '<div class="'.filter_xss($vars['element']['#id']).'">' . $original . '</div>';
  }
  return $original;
}
bumble
@awd-studio
Nov 05 2016 16:29
@adubovskoy да, спс, я уже почитал
Alexander Dubovskoy
@adubovskoy
Nov 05 2016 16:30
оно ,нет?
bumble
@awd-studio
Nov 05 2016 16:30
вроде нет, я не филд рендерю, а свой велик :smile:
Alexander Dubovskoy
@adubovskoy
Nov 05 2016 16:31
а.
bumble
@awd-studio
Nov 05 2016 16:32
$output = array(
  '#type'       => 'container',
  '#attributes' => array(
    'id'    => 'sl-row--' . $block['name'],
    'class' => array_merge($classes, $styles['class']),
    'style' => $styles['style'],
  ),
);
$output['sl_container'] = array(
  '#type'       => 'container',
  '#attributes' => array(
    'class' => array('container', 'sl-container'),
  ),
);
$output['sl_container']['sl_content'] = array(
  '#type'   => 'markup',
  '#markup' => $input['settings']['content'],
);
return $output;
KarmaBot
@KarmaBot
Nov 05 2016 16:32
@awd-studio, чтобы показать длинный листинг кода желательно использовать pastebin-сервис, например gist.github.com или laravel.io/bin.
bumble
@awd-studio
Nov 05 2016 16:33
что-то типа такого....
и нужно чтоб ['sl_content'] был section
Alexander Dubovskoy
@adubovskoy
Nov 05 2016 16:41
'#type' => 'html_tag' смотрел?
bumble
@awd-studio
Nov 05 2016 16:49
о!
ща гляну.
bumble
@awd-studio
Nov 05 2016 17:08
да, все круто - секцию выводит, но в неё уже пихнуть ничего нельзя.. :worried:
нашел сие чудо
позволяет решить, но наверно лучше уже свой тип создать и не парится
в любом случае, @adubovskoy - спасибо!
KarmaBot
@KarmaBot
Nov 05 2016 17:09
Спасибо (+1) для @adubovskoy принято! Текущая карма +20.
boolboost
@boolboost
Nov 05 2016 17:10
А tag element это не уже готовый свой тип?
bumble
@awd-studio
Nov 05 2016 17:10
он не дружит с children
держит только #value
Airat
@codev0
Nov 05 2016 18:29
дайте совет, как передать id строки из бд в такой форме https://i.imgur.com/DqEikty.png ?
function sl_kz_update_city_form_submit($form, &$form_state) {
    $query = db_update('sl_kz_cities');
    $values = $form_state;

    foreach($values as $value) {
        $query->fields(array(
            'city' => $value['values']['cities']['new_value'],
        ));
        $query->condition('id', 1);
    }
    drupal_set_message(t('Cities updated'));
    drupal_goto('admin/config/system/sl-calc-kz/add');
}
думаю надо скрытое поле делать, но чет сомнения
bumble
@awd-studio
Nov 05 2016 18:34
foreach($values as $id => $value)
Airat
@codev0
Nov 05 2016 18:46
сори, неправильно поставил вопрос, дело в том что $id при отправке формы нет
bumble
@awd-studio
Nov 05 2016 18:47
$id - это итератор для таблицы? или откуда он?
Airat
@codev0
Nov 05 2016 18:49
да, итератор
и хз как записать резульатат в нужное поле
bumble
@awd-studio
Nov 05 2016 18:51
посмотри этот ман, там норм расписано
сейчас просто не пойму суть, нужно видеть структуру формы
Airat
@codev0
Nov 05 2016 19:00

как раз по нему и делал.

$form['cities'][$city->id]['city'] = array(
            '#markup' => $city->city
        );

        $form['cities'][$city->id]['new_value'] = array(
            '#type' => 'textfield',
            '#default_value' => $city->city,
            '#required' => true,
        );

поля формы в цикле

bumble
@awd-studio
Nov 05 2016 19:02
$city->id - с этим проблемы?
в таблице (БД), у городов есть уникальное поле (ID'шник)?
Airat
@codev0
Nov 05 2016 19:04
угу, есть.
мб через дата атрибут передать
bumble
@awd-studio
Nov 05 2016 19:06
вот и зови его туда вместо $city->id:
$city->[ИМЯ_IDШНИКА]
формы будут строится в соответствии с ними, а при сохранении сможешь вытянуть из
$form_state['values']['cities']['ИМЯ_IDШНИКА']
Airat
@codev0
Nov 05 2016 19:15
блин, чет я никак не соображу.
вот код http://laravel.io/bin/Jx8Wj
структура БД https://i.imgur.com/RmiyXoK.png
дебажу $form_state через dsm(), там id нет
ну что и логично, я же его не передавал
bumble
@awd-studio
Nov 05 2016 19:22
Попробуй так (на глаз писал):
function sl_kz_update_city_form_submit($form, &$form_state) {
  $query = db_update('sl_kz_cities');
  $values = $form_state['values']['cities'];

  foreach ($values as $id => $value) {
    $query->fields(array(
      'city' => $value['new_value'],
    ));
    $query->condition('id', $id)->execute();
  }
  drupal_set_message(t('Cities updated'));
  drupal_goto('admin/config/system/sl-calc-kz/add');
}
Airat
@codev0
Nov 05 2016 20:12
@awd-studio спасибо.
я так и не сообразил как это все работает. тыркался тыркался, в итоге сделал через скрытое поле :(