[РЕШЕНО] Куча вопросов по теминизации, $form, хуки, кэш хранение файлов, CRON. Активный вопрос: конфликт AJAX

Главные вкладки

Аватар пользователя zhivulin-al zhivulin-al 2 июля 2015 в 15:06

Куча вопросов назрело от того что с Друпал мало знаком, создаю свой первый проект использующий данную CMS.
Есть готовый сверстанный шаблон на Bootstrap 3 сам шаблон. Адекватная критика по шаблону приветствуется. Но только адекватная, больше интересны ответы по темам что ниже!

Задача: создать самостоятельную тему на Друпал используя данный шаблон.

На Главной странице есть куча блоков размещенных в одном регионе, у блоков разные классы, ХТМЛ теги (div / section), также блоку может быть назначен стиль с бакграундом, и дата атрибут с настройкой параллакса.

Что сделано:
1. выбор класса блока: .i-box, .news-large, и др.
2. выбор ХТМЛ тега (div / section)
3. создание стиля с бакграундом.
4. настройки дата для параллакса.

НО! Читая форумы выяснилось, что файлы могут быть временными. Теминизацию блоков сделал используя отдельный модуль хранящий все ХУКи, а в идеале хотелось бы чтобы все хуки находились в файле шаблона. Включил шаблон, работают настройки для блоков, выключил, они исчезли...

Вопрос 1: РЕШЕНО по загрузке 'managed_file'
Не удалится ли при запуске CRON файл записанный таким образом?

<?php
  $data 
$form['module']['#value'] . '-' $form['delta']['#value'];

   

// Загрузка через аякс
   
$form['file'] = array(
    
'#type' => 'managed_file',
    
'#title' => 'Картинка',
    
'#description' => 'Выберите файл с расширением jpg, jpeg, png или gif',
    
'#upload_location' => 'public://',
    
'#upload_validators' => array(
      
'file_validate_is_image' => array(),
      
'file_validate_extensions' => array('png gif jpg jpeg'),
      
'file_validate_size' => array(1024 1024),
    ),
    
'#default_value' =>  isset($img[$data]) ? $img[$data] : '',
  );
?>

Ответ: смотреть...

Вопрос 2: РЕШЕНО
для теминизации использую модуль: MyModul в папке sites/all/modules

<?php
/**
 * Хук выводящий поля форме
 */
  
MyModul_form_block_admin_configure_alter(...) {
   ... 
}

?>

Вопрос по данному ХУКу, может быть я его как то не так в шаблоне подключаю что он не хочет работать? Либо подскажите аналог данного хука для шаблона. Подключаю в шаблоне так: MyModul_form_block_admin_configure_alter(...).
Ответ: НИКАК!) Читать...

Вопрос 3:
Есть необходимость использовать не аякс загрузку изображений а стандартным "дедовским") способом.
Т.е. вместо '#type' => 'managed_file', использовать '#type' => 'file', но проблема в другом MyModul_form_validate() не подлючается, пробовал и так: MyModul_form_block_admin_configure_alter_form_validate() - результата НОЛЬ!
Сведения о полях собираю и записываю так:

<?php
function MyModul_form_block_admin_configure_alter(&$form, &$form_state) {
  
$data $form['module']['#value'] . '-' $data['delta']['#value'];

  

// Сверяем и скидываем данные в массив 
  
$MyModul_block_theme MyModul_block_theme_get();

  

$form['MyModul']['MyModul_block_theme'] = array(
    
'#type' => 'select',
    
'#title' => t('Block theme'),
    
'#description' => 'Select the style on block, that defines its purpose.',
    
'#default_value' => isset($MyModul_block_theme[$data]) ? $MyModul_block_theme[$data] : '',
    
'#options' => array(
      
NULL => t('- None -'),
      
'contact' => t('Contacts block'),
      ...
    ),
  );
}

function 

MyModul_block_theme_get() {
  static 
$MyModul_block_theme;
  if (empty(
$MyModul_block_theme)) {
    
$MyModul_block_themevariable_get('MyModul_block_theme_array', array());
  }

  return 

$MyModul_block_theme;
}
?>

Эта конструкция хорошо подходит и для '#type' => 'managed_file'... Но вот с '#type' => 'file' другая песня... Какая? Пока еще не знаю... Может кто и подскажет, по сути это не критично, но хочется все сделать не "ТОПОРОМ"

Вопрос 4: Как проверить статус файлов, и возможно переменных, т.к. их в БД насильно не записываю, сведения о них итак появляются. Запускаю очистку кеша. И крон по адресу http://mysite.com/admin/config/system/cron файлы все на месте, переменные тоже.
Правда в БД статус файлов - 0.
Но как я вычитал не только это влияет на "временность" файлов. Так даже лучше, если они не удаляются пока настройки шаблона активны. Отключил шаблон, удалились файлы.

Вопрос 5:
Друпал выводит файлы стилей массивом:

  <style type="text/css" media="all">
      import url("...");
      import url("...");
      import url("...");
      import url("...");
  </style>

Возможно ли как то это дело исправить на более привычный вариант, тем более для некоторых стилей я использую ID:

  <link href="..." rel="stylesheet">
  <link href="..." rel="stylesheet">
  <link href="..." rel="stylesheet" id="..."> <!-- Стиль с ID -->
  <link href="..." rel="stylesheet">

Ну, и так более привычно

Вопрос 6:
Как исключить конфликт 2-х полей АЯКС?

<?php
  $form
['...']['My_block_background'] = array(
    
'#type' => 'select',
    
'#title' => t('Use background image parallax'),
    
'#options' => array(
      
=> t('- Not using -'),
      
=> t('Used'),
    ),
    
'#default_value' => isset($parallax[$date]) ? $parallax[$date] : 1,
    
'#ajax' => array(
      
'callback' => 'parallax_callback',
      
'wrapper' => 'parallax-set',
      
'method' => 'replace',
      
'effect' => 'fade',
    ),
  );

  

$form['...']['file'] = array(
    
'#type' => 'managed_file',
    
'#title' => 'Картинка',
    
'#description' => 'Выберите файл с расширением jpg, jpeg, png или gif',
    
'#upload_location' => 'public://',
    
'#upload_validators' => array(
      
'file_validate_is_image' => array(),
      
'file_validate_extensions' => array('png gif jpg jpeg'),
      
'file_validate_size' => array(1024 1024),
    ),
    
'#default_value' =>  isset($image_bg[$date]) ? $image_bg[$date] : '',
  );
?>

Проблема в том, что если загрузить фото, то селект уже не отправит значение.

ЗЫ - буду добавлять вопросы по мере их возникновения

Комментарии

Аватар пользователя serega111 serega111 2 июля 2015 в 16:10

"zhivulin-al" wrote:
а в идеале хотелось бы чтобы все хуки находились в файле шаблона

Да не дай бог у вас такое получится сделать
"zhivulin-al" wrote:
Вопрос 1: по загрузке 'managed_file'

Удалиться. Нужно после самбита формы загрузить файл обновить его статус
"zhivulin-al" wrote:
для теминизации использую модуль:

Это что-то новое
"zhivulin-al" wrote:
Вопрос по данному ХУКу, может быть я его как то не так в шаблоне подключаю что он не хочет работать? Либо подскажите аналог данного хука для шаблона. Подключаю в шаблоне так: MyModul_form_block_admin_configure_alter(...).

В каком еще шаблоне вы его подключаете? Вы явно путаете понятия или делаете что-то не то.
и к тому же, зачем использовать MyModul_form_block_admin_configure_alter, когда есть hook_block_configure и hook_block_save
"zhivulin-al" wrote:
Есть необходимость использовать не аякс загрузку изображений а стандартным "дедовским") способом.
Т.е. вместо '#type' => 'managed_file', использовать '#type' => 'file', но проблема в другом MyModul_form_validate() не подлючается, пробовал и так: MyModul_form_block_admin_configure_alter_form_validate() - результата НОЛЬ!

потому что надо добавить 'validаte' => array('MyModul_form_block_admin_configure_validate') к элементу. Ну и см. выше, не использовать hook_form_alter
"zhivulin-al" wrote:
Вопрос 4: Как проверить статус файлов

нужно сделать в сабмит колбэке примерно следующее
<?php
// Load the file via file.fid.
$file = file_load($form_state['values']['my_file_field']);
// Change status to permanent.
$file->status = FILE_STATUS_PERMANENT;
// Save.
file_save($file);
// Record that the module (in this example, user module) is using the file.
file_usage_add($file, 'user', 'user', $account->uid);
?>
"zhivulin-al" wrote:
но хочется все сделать не "ТОПОРОМ"

Судя по вашим отрывкам из кода и вопросам вы делаете не топором. Топором лучше получится

PS
Если взялись сами писать модули, так хоть изучите доки. Здесь https://api.drupal.org/api/drupal/includes%21module.inc/group/hooks/7 все хуки описаны с примерами, тут все возможные элементы формы и доступные параметры https://api.drupal.org/api/drupal/developer%21topics%21forms_api_referen...

Аватар пользователя zhivulin-al zhivulin-al 2 июля 2015 в 16:11

"Plazik" wrote:
Какие файлы?

Файлы изображений... JPG, JPEG, PNG и т.д.

"Plazik" wrote:
Я делал такие сайты через Panels и Fieldable Panels Panes (FPP) https://www.drupal.org/project/fieldable_panels_panes.[/quote]

<b>СПС</b>!))

Вопрос по FPP и Panels модули создают переменные? Как то не охота лишний раз заморачиваться... А в моем же случае, я использую переменные для IF-ов

Аватар пользователя zhivulin-al zhivulin-al 2 июля 2015 в 16:53

"serega111" wrote:
"zhivulin-al" написал(а):
Вопрос по данному ХУКу, может быть я его как то не так в шаблоне подключаю что он не хочет работать? Либо подскажите аналог данного хука для шаблона. Подключаю в шаблоне так: MyModul_form_block_admin_configure_alter(...).
В каком еще шаблоне вы его подключаете? Вы явно путаете понятия или делаете что-то не то.
и к тому же, зачем использовать MyModul_form_block_admin_configure_alter, когда есть hook_block_configure и hook_block_save

Может что то не так изложил, для того чтобы применить стилизацию из шаблона создал отдельный модуль.
Да, я уже в курсе что хук:
MyModul_form_block_admin_configure_alter(...)
в шаблоне подключать это бред!
Но, мне хотелось бы вбахать ХУК для настройки блоков, и чтобы этот хук хранился не в модуле, а в шаблоне

Для прояснения, скрин того что я инею сейчас:

"serega111" wrote:
"zhivulin-al" написал(а):
В каком еще шаблоне вы его подключаете? Вы явно путаете понятия или делаете что-то не то.
и к тому же, зачем использовать MyModul_form_block_admin_configure_alter, когда есть hook_block_configure и hook_block_save

Юзая hook_block_configure () я не получаю тех полей что на скрине, может опять же что то не так! И по теме об API как раз таки и занимаюсь этим

"serega111" wrote:
"zhivulin-al" написал(а):
потому что надо добавить 'validаte' => array('MyModul_form_block_admin_configure_validate') к элементу. Ну и см. выше, не использовать hook_form_alter

'validаte' => array, каким образом?

$form['...']['file'] = array(
'#type' => 'managed_file',
'#title' => 'Image',
'validаte' => array(),
);
Примерно так?
Заранее СПС!

Аватар пользователя serega111 serega111 2 июля 2015 в 18:51

"zhivulin-al" wrote:
'validаte' => array, каким образом?

<?php
$form['...']['file'] = array(
'#type' => 'managed_file',
'#title' => 'Image',
'#validаte' => array('my_validate_callback
'),
);
?>
"zhivulin-al" wrote:
Но, мне хотелось бы вбахать ХУК для настройки блоков, и чтобы этот хук хранился не в модуле, а в шаблоне

Так работать никогда не будет. Во-первых, шаблоны подгружаются только в момент вывода контента, а вам же этот хук нужен на странице настройки блока. Во-вторых, это противоречит модели MVC, которая используется в друпале.

Аватар пользователя zhivulin-al zhivulin-al 2 июля 2015 в 23:08

"serega111" wrote:
Так работать никогда не будет. Во-первых, шаблоны подгружаются только в момент вывода контента, а вам же этот хук нужен на странице настройки блока. Во-вторых, это противоречит модели MVC, которая используется в друпале.

Спасибо за пояснения! В принципе уже догадался.
Но, согласитесь было бы эстетичненько!)

hook_block_configure () - не совсем то что мне нужно.

Для '#type' => 'managed_file'
Файлы теперь сохраняются:

В сабмите сделал так:

<?php
$date 
$form_state['values']['module'] . '-' $form_state['values']['delta'];

  if (!

$form_state['values']['file']) {
    
// Вопрос с удалением файла пока не решил в процессе
    
unset($image_bg[$date]); // Удаляет значение из переменной
  
}
  else {
    
$image_bg[$date] = file_load($form_state['values']['file']);
    
$image_bg[$date] -> status FILE_STATUS_PERMANENT;
    
file_save($image_bg[$date]);
    
file_usage_add($image_bg[$date]);
    
$image_bg[$date] = $form_state['values']['file'];
  }
?>

CRONом проверял, в БД статус = 1

Аватар пользователя zhivulin-al zhivulin-al 2 июля 2015 в 19:27

"serega111" wrote:

<?php
$form['...']['file'] = array(
'#type' => 'managed_file',
'#title' => 'Image',
'#validаte' => array('my_validate_callback
'),
);
?>

Чет все равно не работает(((
Может в _form_block_admin_configure_alter нет данного способа? Такое возможно?

Аватар пользователя zhivulin-al zhivulin-al 2 июля 2015 в 22:50

Обощел свою тупость, и пошел от противного, сделал так: для '#type' => 'file',
В сабмите

<?php

  $validators 

= array(
    
'file_validate_is_image' => array(),
    
'file_validate_extensions' => array('png gif jpg jpeg'),
    
'file_validate_size' => array(1),
  );

  if (!

$image_bg[$date] = file_save_upload('file'$validators'public://')) {
  
  }
  else {

    

$image_bg[$date] = file_load($form_state['values']['file']);
    
$image_bg[$date]->status FILE_STATUS_PERMANENT;
    
    
drupal_set_message('Картинка загружена');
  }
?>

Все грузит, проверяет, но! если добавит строку file_save($image_bg[$date]); ругается с критом(

Аватар пользователя zhivulin-al zhivulin-al 2 июля 2015 в 20:40

"Plazik" wrote:
Блоки это не сущности.
Если хотите поля в блоках, используйте вместо блоков Bean https://www.drupal.org/project/bean.[/quote]
Вы возможно меня неправильно поняли, мне нужно расширить стандартный функционал. Вопроса о выборе модуля для данных целей просто нет! Если бы у меня что то не получалось это одно, в данном случае у меня не хватает знаний АПИ Друпал.
Создавая доп. поля в админ части блоков я создаю доп. переменные для их дальнейшего использования (ХТМЛ тег враппера блока, фоновое изображение, и т.д.) уже в шаблоне: block.tpl для того чтобы стилизовать каждый из имеющихся блоков. Но, у блока должен остаться стандартный функционал... Неважно что в нем потом будут выводить, опросы, Views, HTML...

Скрин что выложен выше, не просто скрин, это уже рабочая часть сайта. Все эти данные записываются и выводятся как и нужно Скорость работы - также тестил, все устраивает!

Поля в блоках востребованы, но это в дальнейшем

Аватар пользователя zhivulin-al zhivulin-al 2 июля 2015 в 21:28

Еще вопрос 6:
Как исключить конфликт 2-х полей АЯКС?

<?php
  $form
['...']['My_block_background'] = array(
    
'#type' => 'select',
    
'#title' => t('Use background image parallax'),
    
'#options' => array(
      
=> t('- Not using -'),
      
=> t('Used'),
    ),
    
'#default_value' => isset($parallax[$date]) ? $parallax[$date] : 1,
    
'#ajax' => array(
      
'callback' => 'parallax_callback',
      
'wrapper' => 'parallax-set',
      
'method' => 'replace',
      
'effect' => 'fade',
    ),
  );

  

$form['...']['file'] = array(
    
'#type' => 'managed_file',
    
'#title' => 'Картинка',
    
'#description' => 'Выберите файл с расширением jpg, jpeg, png или gif',
    
'#upload_location' => 'public://',
    
'#upload_validators' => array(
      
'file_validate_is_image' => array(),
      
'file_validate_extensions' => array('png gif jpg jpeg'),
      
'file_validate_size' => array(1024 1024),
    ),
    
'#default_value' =>  isset($image_bg[$date]) ? $image_bg[$date] : '',
  );
?>

Проблема в том, что если загрузить фото, то селект уже не отправит значение

Аватар пользователя serega111 serega111 2 июля 2015 в 22:27

"zhivulin-al" wrote:
Но, согласитесь было бы эстетичненько!)

Это было бы очень не удобно
"zhivulin-al" wrote:
Чет все равно не работает(((

Внимательно читайте раздел form reference в api. работать должно
"zhivulin-al" wrote:
Все грузит, проверяет, но! если добавит строку file_save($image_bg[$date]); ругается с критом(

так файл, загруженный через форму managed_file уже сохранен на диске и в бд, вам нужно только поменять статус. зачем вы вот это делаете?
<?php if (!$image_bg[$date] = file_save_upload('file', $validators, 'public://')) {

} ?>

"zhivulin-al" wrote:
Как исключить конфликт 2-х полей АЯКС?

Смотреть в консоль браузера на ошибки.

"zhivulin-al" wrote:
Поля в блоках востребованы, но это в дальнейшем

Ваша затея выглядит очень сомнительно. Не зная АПИ и, судя по всему, имея немного опыта в веб разработке пытаетесь сделать какой-то велосипед.
Если нужно предоставить контроль над блоками для юзера - ставьте wysiwig редактор и пусть он себе пишет html в кастомном блоке тот, который ему нравится. Если нужен контроль над views блоками и т.п. - делается через css

Аватар пользователя zhivulin-al zhivulin-al 2 июля 2015 в 23:07

"serega111" wrote:
"zhivulin-al" написал(а):
Все грузит, проверяет, но! если добавит строку file_save($image_bg[$date]); ругается с критом(
так файл, загруженный через форму managed_file уже сохранен на диске и в бд, вам нужно только поменять статус. зачем вы вот это делаете?
<?php if (!$image_bg[$date] = file_save_upload('file', $validators, 'public://')) {
  
  } ?>

Оп-оп-оп! Не пометил, исправлюсь, это уже для '#type' = 'file'

Решение уже описал здесь...

Аватар пользователя zhivulin-al zhivulin-al 2 июля 2015 в 23:11

"serega111" wrote:
"zhivulin-al" написал(а):
Как исключить конфликт 2-х полей АЯКС?
Смотреть в консоль браузера на ошибки.

Нет, решение здесь: file_field_widget_form ()

Аватар пользователя zhivulin-al zhivulin-al 2 июля 2015 в 23:23

Отдельно для "serega111"
Я не против Вашей критики!
Ваши знания мне помогли в некотором плане. За это Вам спасибо!
Да часто я выношу не ту информацию которую хотелось бы донести, по CSS и WYSIWIG конечно СПС учту...
Пусть я изобретаю велосипед, может мне так хочется? По крайней мере "костылей" в коде у меня нет, весь код выполняется согласно API Друпал! Из выводов по АПИ, да я не ставлю под сомнения ваши глубокие познания. Но прочитать документацию, это принцип любого разработчика...
Я не хочу испортить вам настроение, и это не мои выпадки в вашу сторону... Но если вы считаете мою затею ненужной, никчемной, то хотя бы аргументируйте это более расширенно нежели просто используя свои выводы взятые от не полностью, либо не совсем корректно предоставленной информации.

ЦЫ - На счет информации, согласен на все 100% тут мой "косяк". Но, сложновато писать в редакторе и выдавать мысль одновременно! Спасибо за понимание!

Аватар пользователя t1mm1 t1mm1 3 июля 2015 в 11:09

Quote:

Но если вы считаете мою затею ненужной, никчемной, то хотя бы аргументируйте это более расширенно нежели просто используя свои выводы взятые от не полностью, либо не совсем корректно предоставленной информации.

Это скорее вопрос к тому, что возможно, однажды, ваш сайт предстоит править или дорабатывать другому разработчику, или, вам предстоит дорабатывать функциональную часть так, что текущая реализация потребует значительного изменения в целом. Как делать - решать вам. Все, что вы хотите реализовать - уже давно готово и есть в интернетах, часть - даже тут, на д ру. Но сделано это иначе.
Никаких претензий к вам нет. Просто вы делаете это изначально против шерсти. И отсюда все ваши проблемы "когда не работает". Многие ваши "велосипеды" давно готовы, но в другом разрезе идеологии работы в друпалом.

Аватар пользователя zhivulin-al zhivulin-al 3 июля 2015 в 11:41

"t1mm1" wrote:
Это скорее вопрос к тому, что возможно, однажды, ваш сайт предстоит править или дорабатывать другому разработчику, или, вам предстоит дорабатывать функциональную часть так, что текущая реализация потребует значительного изменения в целом. Как делать - решать вам. Все, что вы хотите реализовать - уже давно готово и есть в интернетах, часть - даже тут, на д ру. Но сделано это иначе.
Никаких претензий к вам нет. Просто вы делаете это изначально против шерсти. И отсюда все ваши проблемы "когда не работает". Многие ваши "велосипеды" давно готовы, но в другом разрезе идеологии работы в друпалом.

Да я не "парюсь" что не работает! Попутно изучаю АПИ, в итоге все норм! Все летает... и сделано под "себя" под ту задумку которая была изначально... Я всего лишь прошу помочь с АПИ, а не с советом выбора модуля...

Ну, и опять же... советуют что? Где аргументы в пользу каких либо советов?! Аргумент, так лучше, да для ребенка подойдет, но не более!

Аватар пользователя t1mm1 t1mm1 3 июля 2015 в 11:48

Я вам не модули предлагаю, а пересмотреть свой подход.

У вас сейчас ситуация такого характера.
Вы берете задачу и делаете так, как сичтаете нужным. Это правильный подход. Но при этом у вас что-то не получается. Вы берете документацию, пытаетесь делать по ней, но у вас ошибка не в коде,а именно в использовании этого кода относительно архитектуры всей cms, о чем выше вам и сказали (проблема с аяксом). Если бы вы изначально делали, как вам посоветовали - проблем бы не было таких в принципе. Да и "летает" понимание относительное. При вашем подходе у вас будут проблемы с кешированием и с последующей адаптацией. Я через это тоже проходил, лет 10 назад. И прекрасно понимаю ваше стремление сделать "лучше для себя". Это правильно. Но это тянет за собой шлейф проблем.
Если же вы хотите и настаиваете на своих решениях, то вам придется их делать самому, так как в голову к вам никто не залезет, и уж тем более разбирать чужие велосипеды.

Вы просите помочь с апи.
Ну тогда давайте вы будете делать все моменты согласно АПИ, и тогда наша помощь будет актуальна. А при подходе "это хочу делать так, а это я буду делать по своему" ничего хорошего не выйдет.
Опять же, я не настаиваю. Но мой опыт будет побольше вашего. И он мне в свое время сказал, что в рамках работающего годами устойчивого движка так делать не стоит. И тем более сетовать на то, что "плохо подсказывают" или "не подсказывают вообще". Код вы пишите согласно стандартам. Но подход - нет. А им пользуются не потому, что делать нехер, а потому что это в итоге повышает производительность и исключает конфликты (как у вас) с другими участками кода. А еще позволяет интегрировать много разного (о чем вы еще не подозреваете) в сам функционал, не трогая уже существующие участки кода. А это важно.

Но опять же, если у вас вагон времени, и вы пишите под себя - то пишите. Но не рассчитывайте на то, что с вами будут возиться как с капризным ребенком (это не хочу, а это хочу).
Мы все писали велосипеды, исправляли костыли, и потом матерились от того, что не изучали АПИ правильно изначально. И есть определенные правила игры. Или вы их придерживаетесь, или нет.

Изучайте АПИ. Это дельное дело. И полезное. Но в рамках вашего подхода - вы или прислушаетесь, или сделайте по своему, и потом все равно переделаете.

По сути.
Вопрос 3.
http://xandeadx.ru/blog/drupal/353

Вопрос 4.
Для управления файлами как минимум стоит хранить их fid. Если вы будете загружать файлы посредством API, то вам просто необходимо хранить где-то fid файла- для управления им, для выгрузки, редактирования и удаления (если нужно).
Так же, почитайте про саму методологию загрузки. Это частично есть в примере-ссылки выше.

Вопрос 5.
Есть несколько решений.
https://api.drupal.org/api/drupal/includes!common.inc/function/drupal_ad...
Вы можете прописать подключение файла стилей через drupal_add_css() в своем обработчике. Но не использовать id, а генерировать/подключать разные файлы. Или участки файлов инлайн.

А можете написать в template.php формирование переменной с нужными стилями и атрибутами и выводить ее в html.tpl.php файле (надеюсь, мне не прийдется рассписывать где именно и в каком предпроцессе это делать?). Но это не правильный путь, так как будут проблемы при агрегации и кешировании. Но он рабочий.

Вопрос 6.
Вам уже ответили.

update.
Я только приветствую ваше стремление изучать и делать правильно. Не подумайте плохо.
Просто доверьтесь в отношении опыта более опытным девелоперам. Вы сохраните кучу времени.
Изучайте, ошибайтесь, пробуйте. Так и появляется опыт. И потом, если не забросите, через пару тройку лет, просматривая эти темы, будете краснеть за свои вопросы и убеждения. Поверьте. Или посмотрите мои вопросы семилетней давности на этом форуме. Это ж ни на одну голову не налезет.

Аватар пользователя serega111 serega111 3 июля 2015 в 11:40

"zhivulin-al" wrote:
Я не против Вашей критики!
Ваши знания мне помогли в некотором плане. За это Вам спасибо!
Да часто я выношу не ту информацию которую хотелось бы донести, по CSS и WYSIWIG конечно СПС учту...
Пусть я изобретаю велосипед, может мне так хочется? По крайней мере "костылей" в коде у меня нет, весь код выполняется согласно API Друпал! Из выводов по АПИ, да я не ставлю под сомнения ваши глубокие познания. Но прочитать документацию, это принцип любого разработчика...
Я не хочу испортить вам настроение, и это не мои выпадки в вашу сторону... Но если вы считаете мою затею ненужной, никчемной, то хотя бы аргументируйте это более расширенно нежели просто используя свои выводы взятые от не полностью, либо не совсем корректно предоставленной информации.
ЦЫ - На счет информации, согласен на все 100% тут мой "косяк". Но, сложновато писать в редакторе и выдавать мысль одновременно! Спасибо за понимание!

Я не столько против того, что вы учитесь, я против того чтобы такие решения шли в продакшн, поэтому сразу пытаюсь подсказать, что ваш модуль не принесет пользы ни вам, ни разработчику, который в будущем это все будет поддерживать (а это может будете вы сами, но через год, когда у вас опыта будет больше)

Аватар пользователя zhivulin-al zhivulin-al 3 июля 2015 в 11:55

"serega111" wrote:
Я не столько против того, что вы учитесь, я против того чтобы такие решения шли в продакшн, поэтому сразу пытаюсь подсказать, что ваш модуль не принесет пользы ни вам, ни разработчику, который в будущем это все будет поддерживать (а это может будете вы сами, но через год, когда у вас опыта будет больше)

Дак "не вопрос"... Как тогда сделать лучше? И что в моем случае не так? ХУК неверный? Чем?

hook_block_configure() - для блоков, определённых в этом же модуле.
hook_form_block_admin_configure_alter() - если задача расширить настройками блок из стороннего модуля, в моем случае, расширение появляется при редактировании блока.
hook_form_block_add_block_form_alter() - тоже самое но, расширение появляется при добавлении блока.

Простого, стандартного блока, это будет стандартный блок, с дополнительными полями необходимыми для настройки каждого блока под вывод определенного контента (иконбоксы, портфолио, новости, и т.д...) ХТМЛ у блоков по сути одинаковый, различие в КСС классе, открывающем/закрывающем ХТМЛ теге, и дата артибуте враппера. Вот и все, блок выводит стандартный контент, все стандартно... Как в версии из коробки... Но только есть дополнительные поля, которые появляются при подключении модуля.
Если модуль пишу не так? То как его надо писать? АПИ неверно подобрал? Как тогда верно будет hook_block_configure() и hook_form_block_admin_configure_alter() это разные хуки, мне нужен именно hook_form_block_admin_configure_alter() и hook_form_block_add_block_form_alter() соответственно...

НЕ ХОЧУ Я БРАТЬ ЧУЖОЙ МОДУЛЬ И КРУТИТЬ ЕГО ПОД СЕБЯ!

Аватар пользователя zhivulin-al zhivulin-al 3 июля 2015 в 11:58

"t1mm1" wrote:
По сути.
Вопрос 3.
http://xandeadx.ru/blog/drupal/353
Вопрос 4.
Для управления файлами как минимум стоит хранить их fid. Если вы будете загружать файлы посредством API, то вам просто необходимо хранить где-то fid файла- для управления им, для выгрузки, редактирования и удаления (если нужно).
Так же, почитайте про саму методологию загрузки. Это частично есть в примере-ссылки выше.

С этим вопрос решен! Спасибо, там кстати и смотрел инфу!)

Аватар пользователя zhivulin-al zhivulin-al 3 июля 2015 в 12:04

"t1mm1" wrote:
Вопрос 6.
Вам уже ответили.

Ответ: смотреть консоль браузера?)
У меня проблема 2-х аякс форм, одна файл (картинка) другая (селект). Гружу картинку, убиваю данные с селекта... наковырял частично file_field_widget_form () но еще не разбирался, в верном пути иду?

Аватар пользователя t1mm1 t1mm1 3 июля 2015 в 13:12

file_field_widget_form()
это виджет для формы (В данном случае тот самый участок кода, который отвечает за загрузку файла на форме редактирования ноды).
И его лучше руками не менять, так как коснется всего сайта. Только не говорите, что вы ковыряете контриб модули и модули системы? Я за это джуниоров шваброй бил. Шваброй, Карл!

Почитайте тут темы про создание кастомных полей. ТАм есть и часть по созданию собственных виджетов, в том числе и для уже существующих полей (что вам и нужно).
И там уже переделывать загрузку. И потом подуключать этот виджет в настройках поля в редактировании типа ноды (управление полями). Например, http://www.drupal.ru/node/116071

А данные селекта как раз и убиваете потому, что у вас форма после аякса не верно ребилдится. То есть аякс отработал, а селекс стал пустым, потому что не отработало его формирование повторно.

Аватар пользователя zhivulin-al zhivulin-al 3 июля 2015 в 12:19

"zhivulin-al" wrote:
По сути.
Вопрос 3.
http://xandeadx.ru/blog/drupal/353
Вопрос 4.
Для управления файлами как минимум стоит хранить их fid. Если вы будете загружать файлы посредством API, то вам просто необходимо хранить где-то fid файла- для управления им, для выгрузки, редактирования и удаления (если нужно).
Так же, почитайте про саму методологию загрузки. Это частично есть в примере-ссылки выше.

Вот ковырнул модуль его ОЛЕНЬ написал?

Аватар пользователя t1mm1 t1mm1 3 июля 2015 в 13:14

Если модуль прошел валидацию на орге - то не олень. Хотя там в контриб модулях есть такие шляпы, что ни на одну голову не налазят. Но это проблема скорее не самих ошибок, а того, что долго вносят изменения.
К тому же, вас не смущает дата последнего релиза этого модуля "2012-Jun-01"? 3.5 года прошло.

Аватар пользователя zhivulin-al zhivulin-al 3 июля 2015 в 13:20

"t1mm1" wrote:
Только не говорите, что вы ковыряете контриб модули и модули системы?

Нее, не в коем. Но подцепляю, вы посмотрите код того модуля что скинул.. Он не большей с 10 функций и те короткие... У меня, в моем модуле, суть практически одинаковая. Есть отличия, небольшие и я не пишу данные в базу, пока не вижу зачем это, если тоже самое делает АПИ, все переменные создаются в таблице variables, после удаления модуля БД чистится, проверял

Аватар пользователя t1mm1 t1mm1 3 июля 2015 в 13:31

Quote:

Нее, не в коем. Но подцепляю, вы посмотрите код того модуля что скинул.. Он не большей с 10 функций и те короткие... У меня, в моем модуле, суть практически одинаковая. Есть отличия, небольшие и я не пишу данные в базу, пока не вижу зачем это, если тоже самое делает АПИ, все переменные создаются в таблице variables, после удаления модуля БД чистится, проверял

а вот это уже совсем другой разговор, похвально-похвально (без сарказма).

По моему тут проще и правильнее будет пользоваться не альтерами, а написать свой виджет для формы этого поля. Основа у вас есть, а как сделать - ссылку я тоже дал (по составным полям - там отдельно о том, как создать инициализацию своего виджета). Пробуйте.

Аватар пользователя zhivulin-al zhivulin-al 3 июля 2015 в 13:35

"t1mm1" wrote:
а вот это уже совсем другой разговор, похвально-похвально (без сарказма).
По моему тут проще и правильнее будет пользоваться не альтерами, а написать свой виджет для формы этого поля. Основа у вас есть, а как сделать - ссылку я тоже дал (по составным полям - там отдельно о том, как создать инициализацию своего виджета). Пробуйте.

Блин... Блин... Блин... Блин... Блин...
Время... Время... Время... Время... Время...

Вы я так понимаю смотрели код модуля?
Если я в своем случае оставляю все как есть, не делаю запись с данными о переменных в БД, т.к. вреде итак пишется, но пока как проверить не знаю... такая конструкция "канает"?)

Аватар пользователя t1mm1 t1mm1 3 июля 2015 в 13:37

да, только смысл?

скажу по другому.
я вам дал работающий пример. Ибо я это делал уже (свой виджет для поля).
Вы уже потратили больше времени. На свой виджет уйдет ну пару часов максимум.

п.с. если вы оставите как есть, то ваш загруженный файл будет удаляться по отработке крона каждый раз.

Аватар пользователя t1mm1 t1mm1 3 июля 2015 в 13:40

Я не могу понять в чем сейчас ваша проблема?
1. У вас нет времени разобраться в сути?
2. Нет времени попробовать сделать свой виджет? (при условии что у вас ест ьуже код работающего виджета загрузки файлов в поле, что вам и нужно)

Или вы просто не можете понять суть работы архитектуры?

Просто ответить на вопрос, почему ваш код не работает - вам уже ответили. Использовать не альтер формы, а сделать свой виджет.
Поверьте, это будет большой левел ап, если вы разберетесь как делать свои типы полей, виджеты для них и форматтеры. ЛУчше потратье 2-3 дня на изучение вопроса, и потом будет намного больше возможностей (начиная от составных полей и заканчивая сложной фильтрацией по ним).

Аватар пользователя zhivulin-al zhivulin-al 3 июля 2015 в 13:47

"t1mm1" wrote:

п.с. если вы оставите как есть, то ваш загруженный файл будет удаляться по отработке крона каждый раз.

Не-не-не... уже решил с файлом вот так:

Это в сабмите

<?php
  $data 
$form_state['values']['module'] . '-' $form_state['values']['delta'];

  if (

$form_state['values']['file']) {
    
$imagebg[$data] = file_load($form_state['values']['file']);
    
$imagebg[$data]->status FILE_STATUS_PERMANENT;
    
file_save($imagebg[$data]);
    
file_usage_add($imagebg[$data], 'mymodule''mymodule'0);
    
$imagebg[$data] = $form_state['values']['file'];  // Эта конструкция "бабахает" фид в переменную
  
}
?>
Аватар пользователя zhivulin-al zhivulin-al 3 июля 2015 в 13:51

"t1mm1" wrote:
Я не могу понять в чем сейчас ваша проблема?
1. У вас нет времени разобраться в сути?
2. Нет времени попробовать сделать свой виджет? (при условии что у вас ест ьуже код работающего виджета загрузки файлов в поле, что вам и нужно)
Или вы просто не можете понять суть работы архитектуры?
Просто ответить на вопрос, почему ваш код не работает - вам уже ответили. Использовать не альтер формы, а сделать свой виджет.
Поверьте, это будет большой левел ап, если вы разберетесь как делать свои типы полей, виджеты для них и форматтеры. ЛУчше потратье 2-3 дня на изучение вопроса, и потом будет намного больше возможностей (начиная от составных полей и заканчивая сложной фильтрацией по ним).

Да нет же, код выполняется без ошибок, но хочется его улучшить...
Сейчас ломаю голову над АЯКСом

Ну и еще с загрузкой изображения стандартом, без аякса разобраться ни как не могу!(

Аватар пользователя zhivulin-al zhivulin-al 3 июля 2015 в 13:55

"zhivulin-al" wrote:
<?php
  $data = $form_state['values']['module'] . '-' . $form_state['values']['delta'];

  if ($form_state['values']['file']) {
    $imagebg[$data] = file_load($form_state['values']['file']);
    $imagebg[$data]->status = FILE_STATUS_PERMANENT;
    file_save($imagebg[$data]);
    file_usage_add($imagebg[$data], 'mymodule', 'mymodule', 0);
    $imagebg[$data] = $form_state['values']['file'];  // Эта конструкция "бабахает" фид в переменную
  }
?>


пока не понимаю что это за "..., 'mymodule', 'mymodule', 0" в поле file_usage_add($imagebg[$data], 'mymodule', 'mymodule', 0);

Аватар пользователя t1mm1 t1mm1 3 июля 2015 в 14:29

Quote:

пока не понимаю что это за "..., 'mymodule', 'mymodule', 0" в поле file_usage_add($imagebg[$data], 'mymodule', 'mymodule', 0);

название вашего модуля, в котором вы имплементите код

Аватар пользователя zhivulin-al zhivulin-al 3 июля 2015 в 13:57

"t1mm1" wrote:
И там уже переделывать загрузку. И потом подуключать этот виджет в настройках поля в редактировании типа ноды (управление полями). Например, http://www.drupal.ru/node/116071[/quote]
В библиотеку ушло!)

Аватар пользователя zhivulin-al zhivulin-al 3 июля 2015 в 19:14

Нашел как подключить валидатор для hook_form_block_admin_configure_alter();

$form['#validate'][] = 'my_file_validator';

Остальное уже "Дело техники!"

Всем Спасибо за участие!