===== Drupal =====
==== d7 ====
=== d7 base modules ===
drush dl module_filter admin_menu views ctools pathauto sitemap bootstrap jquery_update date devel metatag xmlsitemap libraries transliteration token field_group autocomplete_deluxe entity rules calendar date_ical
=== simple drupal 7 field ===
== external_image_link.info ==
name = External image field
description = "Display an image link as an image"
package = Fields
core = 7.x
files[] = external_image_field.module
== external_image_link.install ==
/**
* Implements hook_field_schema().
*/
function external_image_field_field_schema($field) {
$columns = array(
'title' => array('type' => 'varchar', 'length' => 255, 'not null' => FALSE),
'thumb_url' => array('type' => 'varchar', 'length' => 255, 'not null' => FALSE),
'full_url' => array('type' => 'varchar', 'length' => 255, 'not null' => FALSE),
);
return array(
'columns' => $columns
);
}
== external_image_link.module ==
/**
* Implements hook_field_info().
*/
function external_image_field_field_info() {
return array(
'external_image_field_external_image' => array(
'label' => t('External image link'),
'description' => t('Display a link to an image.'),
'default_widget' => 'external_image_field_text',
'default_formatter' => 'external_image_field_simple_text',
),
);
}
/**
* Implements hook_field_is_empty().
*/
function external_image_field_field_is_empty($item, $field) {
return empty($item['full_url']);
}
/**
* Implements hook_field_formatter_info().
*/
function external_image_field_field_formatter_info() {
return array(
'external_image_field_simple_text' => array(
'label' => t('Simple text-based formatter'),
'field types' => array('external_image_field_external_image'),
),
);
}
/**
* Implements hook_field_formatter_view().
*/
function external_image_field_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
$element = array();
foreach ($items as $delta => $item) {
$variables = array(
'path' => $item['thumb_url'],
'alt' => 'Test alt',
'title' => 'Test title',
'attributes' => array(),
);
$element[$delta] = array(
'#markup' => l(theme_image($variables), $item['full_url'], array('html' => TRUE, 'attributes' => array('title' => $item['title'], 'class' => 'colorbox'))),
);
}
return $element;
}
/**
* Implements hook_field_widget_info().
*/
function external_image_field_field_widget_info() {
return array(
'external_image_field_text' => array(
'label' => t('Default'),
'field types' => array('external_image_field_external_image'),
),
);
}
/**
* Implements hook_field_widget_form().
*/
function external_image_field_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
$element['title'] = array(
'#type' => 'textfield',
'#title' => t('Image title'),
'#default_value' => isset($items[$delta]['title']) ? $items[$delta]['title'] : '',
);
$element['thumb_url'] = array(
'#type' => 'textfield',
'#title' => t('Image thumb URL'),
'#default_value' => isset($items[$delta]['thumb_url']) ? $items[$delta]['thumb_url'] : '',
);
$element['full_url'] = array(
'#type' => 'textfield',
'#title' => t('Image full URL'),
'#default_value' => isset($items[$delta]['full_url']) ? $items[$delta]['full_url'] : '',
);
return $element;
}
/**
* Implements hook_field_widget_error().
*/
function external_image_field_field_widget_error($element, $error, $form, &$form_state) {
switch ($error['error']) {
case 'external_image_field_invalid':
form_error($element, $error['message']);
break;
}
}
=== Batch by drush ===
== Sources ==
* http://www.metaltoad.com/blog/using-drupal-batch-api
* http://victorquinn.com/blog/2012/08/11/programmatically-creating-fielded-d7-nodes/
== How ? ==
I needed to import some content from a Joomla! website. I have exported the content using phpmyadmin and asking to get the data as a php array from the table 'jos_content' and get only the fields named :
* title
* introtext
* fulltext
* state
* created
* created_by
* modified
Then, i have used a drush script to import them. It tooks about 30 seconds for 280 nodes. The exported file was 1.2MB
== Code ==
~/.drush/bash_import.drush.inc
=== d7 link ajax call ===
function mymodule_menu() {
$items['mymodule/%'] = array(
'title' => 'My module callback',
'type' => MENU_CALLBACK,
'page callback' => 'mymodule_callback',
'page arguments' => array(1),
'access callback' => TRUE,
);
}
function mymodule_node_view($node, $build_mode = 'full') {
if ($node->type == 'mynodetype' && $build_mode == 'full') {
$node->content['mylink'] = array(
'#type' => 'link',
'#title' => t('Do the magic'),
'#href' => 'mymodule/'.$node->nid,
'#prefix' => '',
'#suffix' => '
',
'#ajax' => array(
'effect' => 'fade',
),
);
}
}
function mymodule_callback($nid) {
$output = 'Yeah';
$commands = array();
$commands[] = ajax_command_replace('#mylink-ajax-result', $output);
$page = array('#type' => 'ajax', '#commands' => $commands);
ajax_deliver($page);
}
=== d7 quick vertical tabs ===
$form['main_fieldset'] = array(
'#type' => 'fieldset',
'#title' => 'my fieldset'
);
$form['main_fieldset']['mytabs'] = array(
'#type' => 'vertical_tabs',
);
$form['main_fieldset']['other'] = array(
'#type' => 'fieldset',
'#title' => 'my fieldset',
'#group' => 'mytabs'
);
=== d7 relations ===
Here are some pieces of code to play with nodes and "relation" module.
function relation_new_child_node_view($node, $build_mode = 'full') {
if ($build_mode == 'full') {
// get available relations
$relation_types = relation_get_available_types('node', $node->type, 'target');
if ($relation_types) {
$content = array();
foreach ($relation_types as $relation_type) {
// get available node types
$nodes_types = array();
$items = array();
foreach ($relation_type->source_bundles as $source_bundle) {
$values = explode(':', $source_bundle);
$nodes_types[$values[1]] = node_type_get_name($values[1]);
$items[] = l(
t('Create a new !type', array('!type' => $nodes_types[$values[1]])),
'node/add/' . $values[1],
array(
'query' => array(
'destination' => 'node/' . $node->nid,
'rt' => $relation_type->relation_type,
'nid' => $node->nid
)
)
);
}
if (!empty($items)) {
$content['relation_links'] = array(
'#markup' => theme_item_list(array(
'items' => $items,
'title' => t('Create related content'),
'type' => 'ul',
'attributes' => array()
))
);
}
// get related content
$query = relation_query('node', $node->nid);
$query->entityCondition('bundle', $relation_type->relation_type);
$results = $query->execute();
if ($results) {
// get the related nodes
$related_nodes = array();
foreach ($results as $result) {
$relation = relation_load($result->rid);
$entities = field_get_items('relation', $relation, 'endpoints');
$related_nodes[] = node_load((int)$entities[0]['entity_id']);
}
if (!empty($related_nodes)) {
$nodes_types = array_unique($nodes_types);
foreach ($nodes_types as $node_type => $node_type_name) {
$items = array();
foreach ($related_nodes as $related_node) {
if ($related_node->type == $node_type) {
$items[] = l($related_node->title, 'node/' . $related_node->nid, array('attributes' => array('title' => $related_node->title)));
}
}
if (!empty($items)) {
$content['related_links'][$node_type] = array(
'#markup' => theme_item_list(array(
'items' => $items,
'title' => $node_type_name,
'type' => 'ul',
'attributes' => array()
))
);
}
}
}
}
}
if (!empty($content['related_links'])) {
$node->content[] = $content['related_links'];
}
if (!empty($content['relation_links'])) {
$node->content[] = $content['relation_links'];
}
}
}
}
function relation_new_child_node_insert($node) {
dsm('passed');
if ((isset($_GET['rt']) && !empty($_GET['rt'])) && (isset($_GET['nid']) && !empty($_GET['nid']))) {
$endpoints = array();
$endpoints[] = array('entity_type' => 'node', 'entity_id' => $node->nid);
$endpoints[] = array('entity_type' => 'node', 'entity_id' => $_GET['nid']);
$new_relation = relation_create($_GET['rt'], $endpoints);
if ($rid = relation_save($new_relation)) {
drupal_set_message(t('Relation created'), 'status', FALSE);
}
else {
drupal_set_message(t('Creating relation failed'), 'warning', FALSE);
}
}
}
{{tag>drupal}}
==== d8 ====
=== d8 install ===
sudo apt install php-gd
sudo apt install php-mbstring
composer create-project drupal/recommended-project:8.x d8test
{{tag>drupal}}