¿Cómo deshabilitar las opciones 'promocionar a portada' y 'adhesivo'?

14

Dos posibles métodos que he explorado:

Use hook_form_alter para desarmar ambas opciones en los formularios de edición de nodos. Pero en la página principal de contenido de administración, las opciones siguen apareciendo en el menú desplegable 'Actualizar opciones'.

Utilice el módulo de opciones de nodo de anulación . Esto proporciona un control granular, pero significa deshabilitar el permiso 'Administrar contenido'. Los usuarios no pueden ver las 'Opciones de actualización', que aún necesitan para publicar, eliminar, etc.

Pushka
fuente

Respuestas:

16

Hay 3 lugares, donde se pueden ver esas opciones:

  • en admin / structure / types / manage / article, para el tipo de contenido "Artículo"

    captura de pantalla

  • en nodo / 2 / editar, para el nodo con ID igual a 2

    captura de pantalla

  • en admin / content, entre las "Opciones de actualización"

    captura de pantalla

Si necesita eliminar las opciones de esas páginas de configuración / administrativas, debe modificar los siguientes creadores de formularios:

node_admin_nodes()es el generador de formularios para la descripción general de la administración de nodos en admin / content, que incluye el campo "Opciones de actualización" que permite a los usuarios con el permiso correcto promover / degradar un nodo desde la página principal y hacer que un nodo sea adhesivo. El campo enumera todas las operaciones de nodo implementadas por los módulos; en la lista de las operaciones obtenidos con $operations = module_invoke_all('node_operations'), esas operaciones están representadas de $operations['promote'], $operations['demote'], $operations['sticky'], y $operations['unsticky'].

kiamlaluno
fuente
13

Aquí hay un módulo personalizado que escribí para Drupal 7 que elimina "promocionar a la página principal" y "adhesivo en la parte superior de las listas" en los formularios de agregar / editar nodo, formularios de agregar / editar tipo de contenido y el menú desplegable admin / contenido. Este módulo no altera la configuración de la base de datos, por lo que no cambiará el contenido existente, siempre puede deshabilitarlo y recuperar sus opciones y todo funcionará igual que antes.

Pegue este código en un hide_sticky_promote.module y haga un archivo hide_sticky_promote.info correspondiente, habilite el módulo y wallah, no más pegajoso y promueva casillas de verificación o selecciones desplegables.

/**
 * Remove sticky/promote entirely from add and edit content type forms.
 *
 * Implements hook_form_FORM_ID_alter().
 */
function hide_sticky_promote_form_node_type_form_alter(&$form, &$form_state, $form_id) {
  // Remove sticky/promote entirely from add and edit content type forms.
  $options = array('promote', 'sticky');
  foreach ($options as $key) {
    unset($form['workflow']['node_options']['#options'][$key]);    
  }
}

/**
 * Remove sticky/promote entirely from node/X/edit & node/X/add forms.
 * 
 * Implements hook_form_BASE_FORM_ID_alter().
 */
function hide_sticky_promote_form_node_form_alter(&$form, &$form_state, $form_id) {
  $options = array('promote', 'sticky');
  foreach ($options as $key) {
    $form['options'][$key]['#access'] = FALSE;
  }
}

/**
 * Remove some sticky/promote update options on admin/content.
 *
 * Implements hook_form_FORM_ID_alter().
 */
function hide_sticky_promote_form_node_admin_content_alter(&$form, &$form_state, $form_id) {
  $options = array('demote', 'promote', 'sticky', 'unsticky', );
  foreach ($options as $key) {
    unset($form['admin']['options']['operation']['#options'][$key]);
  }
}

O cógelo desde aquí en forma de módulo: https://github.com/StudioZut/hide-sticky-promote

Elijah Lynn
fuente
3

Use lo siguiente:

/**
 * Implements hook_form_alter().
 * This is remove the promote to frontpage, and make sticky options from node edit pages
 */
function alter_drupal_form_alter(&$form, &$form_state, $form_id) {
  if (strpos($form_id, '_node_form') !== FALSE) {
    unset($form['options']['sticky']);
    unset($form['options']['promote']);
  }

  if (strpos($form_id, 'node_admin_content') !== FALSE) {
    //$opt[''] = '- Select -';
    $opt['publish'] = 'Publish selected content'; 
    $opt['unpublish'] = 'Unpublish selected content'; 
    $opt['delete'] = 'Delete selected content'; 
    $opt['pathauto_update_alias'] = 'Update URL alias'; 
    $form['admin']['options']['operation']['#options'] = $opt;


    // print_r($form['admin']['options']['operation']['#options']);
  }
}
Sumaiya
fuente
2

En Drupal 8, la opción se puede deshabilitar por tipo de contenido:

/admin/structure/types/manage/page/form-display

El campo "formulario masivo de operación de nodo" también debe modificarse en la vista de contenido de administrador para eliminar la acción correspondiente de / admin / content

/admin/structure/views/view/admin_content

Si desea mantener las opciones de promoción del tipo de contenido, para el uso con vistas personalizadas, por ejemplo, la vista "portada" que genera la página de portada también se puede modificar en

/admin/structure/views/view/frontpage

Agregar, por ejemplo, un filtro adicional 'no es igual a promocionado' y eliminar el "comportamiento sin resultados" hace que esa vista no devuelva resultados.

Matoeil
fuente
1

Puede deshabilitar la 'promoción a portada' editando el tipo de contenido. Para ocultarlo y / o las opciones, revisiones y más, consulte el módulo Jammer para Drupal 7.

PWM
fuente
0

¿Por qué no hacer una región de plantilla diferente que solo aparece en la página principal y eliminar la región ['contenido'] en esa página?

Los elementos en los formularios se pueden ocultar usando css o con hook_preprocess_form ()

Cubo inspirar
fuente
0

Yo uso el módulo "Promover deshabilitar" para esto.

Crea un control en Configuración -> Autoría de contenido -> Promover deshabilitar que proporciona una lista selecta de todos sus tipos de contenido. Ctrl / selección múltiple de elementos en la lista para eliminar la opción de promoción por completo.

shuckc
fuente
0
function HOOK_form_node_form_alter(&$form, FormStateInterface $form_state) {
  if (isset($form['promote'])) {
    unset($form['promote']);
  }

  if (isset($form['sticky'])) {
    unset($form['sticky']);
  }
}

Solo necesita arriba

Ankit Shah
fuente
-1

Sospecho que podría implementar un hook_node_presave y establecerlos en 0. Esto debería anular cualquier forma posible de configurarlos.

También puede intentar hook_form_alterel formulario utilizado en esa página de administración y eliminar esas opciones.

mpdonadio
fuente