drupal 7 – ¿Cómo tienen varias instancias de un bloque personalizado?

Pregunta:

Entonces tengo un bloque personalizado que se ha creado dentro del módulo. He utilizado la API de drupal para generar los campos nuevos, lo que funciona perfectamente.

Sin embargo, tengo un problema con varias instancias del bloque personalizado. Como quiero que los bloques estén en un espacio aislado, ya que los campos personalizados solo están relacionados con el bloque utilizado dentro de una región.

Ahora, usando Multi Block, puedo crear otra instancia de ese bloque, pero el campo es exactamente el mismo. ¿Cuál sería el mejor enfoque para tener un bloque, pero siempre que se use, sus campos personalizados por bloque?

case 'live_chat_block' :
    variable_set('text_variable', $edit['text_body']);
break;

Ahora la idea que tenía era agregar en la "página del panel" como ID de variable, pero podría haber una mejor manera. Cualquier sugerencia sería útil.


Solo para ampliar lo que me gustaría lograr:

Actualmente tenemos páginas de panel implementadas y hemos construido un bloque personalizado con campos personalizados dentro de ese bloque personalizado. El requisito es que cada bloque que arrastremos a una de las páginas del panel, nos gustaría que tuvieran campos únicos.

Página del panel: 1 ID de bloque: 123 Título del campo personalizado: Superman

Página 2 del panel: ID de bloque: 123 Título del campo personalizado: Batman

Ahora, como puede ver, lo único que cambia son las páginas del panel, el bloque permanece igual y los campos personalizados deben ser únicos para esa página del panel y no el bloque.

Actualmente, al cambiar un bloque, también afecta a todos los demás bloques.

function livechat_block_configure($delta=''){
  $form = array();

  switch($delta) {
     case 'live_chat_block' :
        // checkbox example:
      $form['text_body'] = array(
        '#type' => 'textfield',
        '#title' => t('Enter in Title here'),
        '#default_value' => variable_get('text_variable', ''),
      );


        break;
  }
  return $form;

}

Respuesta:

Agregue la siguiente función en su template.php

function <themeName>_render_block($module, $delta, array $options = array()){
  $default_options = array(
    'title' => '<none>',
    'region' => -1,
  );

  $options = array_merge($default_options, $options);

  $block = db_query('SELECT * FROM {block} WHERE module = :module AND delta = :delta', array(':module' => $module, ':delta' => $delta))->fetchObject();
  if($block) {
    $block = block_load($module, $delta);
    $block->title = $options['title'];
    $block->region = $options['region'];
    $blocks = array($block);
    $rblocks = _block_render_blocks($blocks);
    $render_array = _block_get_renderable_array($rblocks);
    return drupal_render($render_array);
  }
  return "";
}

luego, cuando quieras renderizar el bloque, escribe la siguiente línea

print render <themeName>_render_block($module_name, <id of block>, array of options like title etc)

Puede encontrar el nombre del módulo y la identificación del bloque yendo a la página de configuración del bloque para la ruta admin / estructura / bloquear / administrar / vistas / ubicaciones-bloque_1 / configurar
el nombre del módulo es "vistas" y la identificación es "location-block_1"

Entonces la función de render será

print render <themeName>_render_block("views", "location-block_1", array("title" => t("My block title")));

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım