DrupalCamp Краснодар 2017

16 декабря 2017 в городе Краснодаре пройдет DrupalCamp.
Регистрация, Доклады.

Снипеты

Создать таблицу в БД ручным способом

$name = 'field_revision_commerce_free_shipping';
$table = drupal_get_schema($name );
if (!db_table_exists($name)) {
  db_create_table($name, $table);
}

How to change the title of a Drupal 7 Views 3 via code

/**
 * Implements hook_views_post_render().
 */
function MODULENAME_views_post_render($view) {
  if ($view->name == 'my_view_name') {
    if ($view->current_display == 'my_display_name') {
      $view->set_title(check_plain($new_title)));
    }
  }
}
Links: hook_views_post_render(), view::set_title

Закрываем доступ к файлам .patch, .orig, .rej через .htaccess.

Добавляем в файл .htaccess. Версия для Apache 2.2.

# Disable access to file.orig, file.rej, file.patch.
<FilesMatch "\.(orig|rej|patch)$">
  Order allow,deny
</FilesMatch>

Вывод родительских терминов словаря в блок

<?php

/**
 * Implements hook_block_info().
 */
function MYMODULE_block_info() {
  $blocks['product_category_links'] = array(
    'info' => 'Product category links',
    'cache' => 'DRUPAL_CACHE_GLOBAL',
  );

  return $blocks;
}

/**
 * Implements hook_block_view().
 */
function MYMODULE_block_view($delta = '') {
  // The $delta parameter tells us which block is being requested.
  if ($delta == 'product_category_links') {
    $terms = taxonomy_get_tree(2, 0, 1, true);
    $content = '';
    $links = array();

    foreach ($terms as $key => $term) {
      $path = taxonomy_term_uri($term);
      $links[] = l($term->name, $path['path']);
    }

    if (!empty($links)) {
      $content .= theme('item_list', array('items' => $links));
    }

    $block['subject'] = t('Products');
    $block['content'] = $content;

    return $block;
  }
}

Feeds source источник для mapping

/**
 * Implements hook_feeds_parser_sources_alter();
 */
function ft_feeds_parser_sources_alter(&$sources, $content_type) {
  $sources['feeds_original_url'] = array(
    'name' => t('Feed source url'),
    'description' => t('Feed start url.'),
    'callback' => 'ft_get_feeds_original_url',
  );
}

function ft_get_feeds_original_url(FeedsSource $source, FeedsParserResult $result, $key) {
  $config = $source->getConfig();
  $fetcher_class_name = get_class($source->importer()->fetcher);
  $url = $config[$fetcher_class_name]['source'];

  return $url;
}

Массовые изменения в body у нод конкретного типа

$result = db_select('node', 'n')
  ->fields('n', array('nid'))
  ->condition('type', 'article', '=') // выбрать все ноды типа article
  ->execute();

foreach ($result as $record) { 
  $nid = $record->nid;
  $wrapper = entity_metadata_wrapper('node', $nid);
  $body = $wrapper->body->value->value();
  $newbody = preg_replace('', '', $body);
  $wrapper->body->value->set($newbody);
  $wrapper->save();
}

Drush site-install и создание базы данных

Чтобы не создавать mysql базу вручную, просим drush об этом.
 drush si minimal --db-su="root" --db-su-pw="root_pass" --db-url="mysql://user:pass@localhost:port/dbname" --locale="ru"
Разбираем по частям:
minimal # установочный профиль.
--db-su="root" --db-su-pw="root_pass" # пароль и логин от mysql пользователя, который может создавать БД.
--db-url="mysql://user:pass@localhost:port/dbname" # данные для доступа к БД.
--locale="ru" # язык.

Преобразование даты из Javascript для MySQL

var date = new Date();
var strDate = date.toJSON().slice(0, 10);

console.log(strDate); // 2015-05-22

jQuery VK audio parse {ulr, title, artist}.

  1. Отрываем VK аудио.
  2. Подключаем jQuery.
  3. Вставляем код.
var list = [];

jQuery.each(jQuery("#audios_list .audio"), function( index, value ) {
  var mp3 = jQuery("input[id^='audio_info']", jQuery(value)).attr('value').split('?').shift();
  var artist = jQuery(".title_wrap > b", jQuery(value)).text();
  var title = jQuery(".title_wrap > .title", jQuery(value)).text();
  list.push({"mp3":mp3,"artist":artist,"title":title}) 
});

console.log(JSON.stringify(list))

Подключить библиотеку jQuery в консоли Google Chrome

  1. В Google Chrome открываем панель разработчика (F12).
  2. Нажимаем вкладку console.
  3. Вставляем код.
var jq = document.createElement('script');
jq.src = "//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js";
document.getElementsByTagName('head')[0].appendChild(jq);
// Теперь несколько секунд ждем пока jQuery подгрузится, и запускаем.
jQuery.noConflict();