Перейти к основному содержанию

drupal 7

Программное перемещение блока и расположение его после определенного блока

Отправлено said от вт, 10/02/2018 - 15:37

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

Теги

Настраиваемый список значений поля автодополнение в поле типа Entity Reference

Отправлено said от чт, 07/13/2017 - 10:42

Алгоритм действий

1. Устанавливаем модуль entityreference_view_widget
2. Создаю представление нужного типа (нода, если в поле автодополнения нужно выбирать ноду, либо пользователь и т.п.). В это представлении создаю display Entity Reference
3. Создаю поле типа Entity Reference и в его настройках включаю режим views

 

Теги

Присоединение поля из любой сущности к кастомной форме

Отправлено said от ср, 07/05/2017 - 12:05
function  mymodule_custom_form($form, $form_state) {
  $node = new stdClass();
  // тип материала с которого берется поле
  $node->type = 'claim';

  // подготавливаю массив поля в форме
  $form['uc_product_image'] = array();
  // присоединяю поле uc_product_image со всеми настройками, 
  // так как бы оно было при создании нового материала типа claim
  field_attach_form('node', $node, $form['uc_product_image'], $form_state, NULL, array(
    'field_name' => 'uc_product_image'
  ));

  $form['submit'] = array(
    '#type' => 'submit',
    '#value' =>

Шаблон пути ноды построенный на основе дерева категорий

Отправлено said от ср, 04/26/2017 - 18:26

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

katalog/[node:taxonomy-catalog:parents:join-path]/[node:title]

если же товар может быть привязан к нескольким терминам, то используем

katalog/[node:taxonomy-catalog:0:parents:join-path]/[node:title]

где
katalog - корень каталога
[node:taxonomy-catalog:0:parents:join-path] - объединенные сегменты пути родительских терминов
[node:title] - имя ноды

Теги

Программное создание сущности при помощи entity_metadata_wrapper

Отправлено said от ср, 04/12/2017 - 12:53

Создание термина таксономии

$data = array(
  'name' => 'имя теримна',
  'vid' => GM_VID,
  'description' => 'Описание',
);
$term = entity_create('taxonomy_term', $data);
$wrapper = entity_metadata_wrapper('taxonomy_term', $term);
$wrapper->save();

// теперь сохраняю поля
$wrapper->field_some_field = 'data';
$wrapper->save();

Создание ноды с коллекцией полей

Получение и обновление значений сущности через entity_metadata_wrapper

Отправлено said от чт, 02/02/2017 - 10:38

Приемы работы с entity_metadata_wrapper

$wrp = entity_metadata_wrapper('node', $nid);

// вывод свойства сущности
print $wrp->title->value();

// Изменить значение поля
$wrp->field_file->file->set($fid);

 

Теги

Вставка блока контекстного меню в произвольный элемент верстки

Отправлено said от пн, 12/26/2016 - 11:18

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

<?php if ($is_admin): ?>
<div class="contextual-links-wrapper"><!-- это тот элемент, при наведении на который будут появляться контекстные ссылки -->
  <ul class="contextual-links">
    <li class="block-configure first"><a href="/node/1990/edit">Редактировать слайдер</a></li>
  </ul>
</div>
<?php endif; ?>

 

Теги

Создание собственной ajax-команды

Отправлено said от ср, 11/30/2016 - 10:04

Собственная ajax-команда в drupal 7 создается с помощью следующего кода, помещенного в js скрипт:

(function($, Drupal) {
  Drupal.ajax.prototype.commands.afterAjaxCallbackFilter = function(ajax, response, status)
  {
    alert(response.data);
  };
}(jQuery, Drupal));

После этого в ajax-обработчике запроса эта команда используется следуюзим образом.

$commands[] = array (
  'command' => 'afterAjaxCallbackFilter',
  'data' => 'some data',
);

 

Теги

Решение проблемы доступа к приватному файлу

Отправлено said от ср, 11/16/2016 - 14:25

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

Чтобы решить эту проблему, необходимо реализовать hook_file_download_access с логикой проверки доступа к файлу.

Пример простейщей проверки, при которой доступ расрешается для всех авторизованных пользователей

Теги