===== 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' => '', '#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}}