Desativar guias verticais por tipo de conteúdo ou função do usuário

10

Alguns usuários podem apenas editar um dos conjuntos de campos que aparecem nas guias verticais no formulário de edição do nó. Nesse caso, parece um pouco tolo usar guias verticais, pois existe apenas uma guia vertical para você escolher. Veja a captura de tela:

captura de tela

Portanto, é possível desativar as guias verticais por função de usuário? Ou, exceto, desabilite-os completamente para determinados tipos de conteúdo? Para o meu caso de uso, só quero que o Location não seja exibido nas guias verticais.

Tentei os campos renderizáveis ​​e o grupo de campos juntos, mas eles gerenciaram o formulário incorretamente (buggy, acho). Organizar Os campos não podem separar as guias verticais.

Jay
fonte
Você já reparou isso? Tentando fazer o mesmo com a guia do produto ubercart.
Dee

Respostas:

7

Existem algumas maneiras de fazer isso:

  1. Você pode usar o módulo Renderable Elements (como você mencionou acima). Ele permite que você registre qualquer parte da construção em sua instalação e gerencie a exibição através da interface do usuário do campo. Ele disponibilizará elementos (adicionais) de entidades existentes nas telas de gerenciamento de formulários / exibição ou você pode, por exemplo, registrar o formulário de contato e reorganizar os campos através da interface do usuário do campo. Atualmente funciona bem em formulários, o suporte para outros está chegando em uma segunda iteração.

  2. Ou adicione o seguinte ao seu módulo personalizado:

    $config['yourcontenttype_node_form'] = FALSE;
    variable_set('vertical_tabs_forms', $config);
  3. Um módulo sandbox que desativa guias verticais

Aqui está este problema central que se refere a isso.


fonte
Como eu disse na pergunta, o Renderable Elements não está funcionando para mim. Ainda está no estágio alfa e há um bug conhecido no Location. Portanto, não funciona para a minha situação. Caso contrário, sim, acho que isso funcionaria. Se no futuro esse bug for corrigido, o Renderable Elements é provavelmente a melhor maneira de fazer isso.
Jay Jay
desculpe, acabei de ler sua pergunta e perdi completamente sua referência ao módulo de elementos renderizáveis. Dito isto, a versão dev funciona como um encanto. Dê uma chance.
Hum, ok. Vou tentar usar a versão dev se não houver outras alternativas. Deixando isso em aberto por enquanto.
Jay
Modifiquei minha resposta acima com mais opções.
1
Você está certo. Eu apenas tentei e isso não funciona no D7, como no D6. Infelizmente, se os elementos renderizáveis ​​não funcionarem e você não se sentir confortável com seu próprio módulo ou usando o módulo sandbox, não tenho certeza do que mais.
6

Você também pode usar a verificação #access para impedir que as pessoas vejam as guias verticais.

$form['additional_settings']['#access'] = FALSE;

Simplesmente adicione isso a um formulário de gancho, altere ou entre o carregamento e a renderização de um formulário. Depois disso, você pode chamar render ($ form) para obter a marcação.

Derek Webb
fonte
2

Eu escrevi uma solução simples e possível no segmento já mencionado: https://drupal.org/node/1048644#comment-7822687 . Por conveniência, colarei aqui.

Existe uma maneira simples de desativar as guias verticais em um formulário, simplesmente alterando o $form['additional_settings']['#type']valor da variável para 'fieldset'uma implementação de hook_form_alter () ou hook_form_FORM_ID_alter () , se for igual a 'vertical_tabs'.
Você não precisa alterar as configurações de acesso ou percorrer toda a $formmatriz recursivamente, a última consome recursos demais desnecessariamente.
(Testado no Drupal 7.23 .)

/**
 * Disable Vertical tabs on a form with simply changing the value of $form['additional_settings']['#type']
 * @see https://drupal.org/node/1048644
 */
function form_disable_vertical_tabs(&$form){
  // originally $form['additional_settings']['#type'] equals to 'vertical_tabs'
  if(isset($form['additional_settings']['#type']) && ($form['additional_settings']['#type'] === 'vertical_tabs')){
    $form['additional_settings']['#type'] = 'fieldset';
  }
}

/**
 * Implements hook_form_alter().
 */
function MYMODULEORTHEMENAME_form_alter(&$form, &$form_state, $form_id) {

  if($form_id == 'my_form_id'){
    // disable vertical tabs for this form
    form_disable_vertical_tabs($form);
  }
}

Isso é tudo, é claro, substituiMYMODULEORTHEMENAME o nome do seu módulo ou tema (o último em um template.phparquivo) emy_form_id a identificação do seu formulário.


Você também pode desativar os campos verticais apenas para usuários que NÃO possuem a função de administrador :

/**
 * Implements hook_form_alter().
 */
function MYMODULEORTHEMENAME_form_alter(&$form, &$form_state, $form_id) {

  global $user;
  $is_administrator = in_array('administrator', array_values($user->roles));

  if($form_id == 'my_form_id'){
    // if $user does NOT have the administrator role.
    if (!$is_administrator) {
      // disable vertical tabs for this form
      form_disable_vertical_tabs($form);
    }
  }
}

No caso de alguém está interessado, I anexa um remendo (que faz o mesmo que acima) para Dripman módulo de caixa de areia 's: # 2080739: simplificar o método de desativação guias verticais com apenas mudando a $form['additional_settings']['#type']a'fieldset' .

Sk8erPeter
fonte
Excelente solução, @ Sk8erPeter. Gostaria de saber se é possível ocultar as configurações adicionais sem definir '#access' = FALSE, pois isso perde os valores que seriam definidos pelas configurações padrão, como o alias da URL e o status publicado.
18714 Jav Jav das
0

No momento, os elementos com capacidade de renderização não são suportados e reconhecem na página do projeto que estão em conflito com alguns outros módulos contribuídos, para que eu não confie nele nos sites de produção.

A questão de como desativar completamente as guias verticais é abordada neste tópico .

O Dripman criou um módulo sandbox simples para desativar completamente as guias verticais.

Dependendo do nível de envolvimento desejado com a codificação, o módulo Dripman deve ser facilmente personalizável para ser seletivo com base em campos / funções.

Desculpas por sobreposição com resposta sucinta por @nicoz

autopoiético
fonte
0

Você pode usar o módulo Vertical Tabs Visibility .

Este módulo ajuda a gerenciar a visibilidade das guias verticais nos formulários de adição / edição de tipos de conteúdo.

Para gerenciar a visibilidade das guias verticais no tipo de conteúdo, adicione / edite formulários. basta visitar a /admin/config/user-interface/vertical-tabs-visibility página e selecionar os tipos de conteúdo. As guias verticais no formulário de adição / edição de nó serão desativadas para os tipos de conteúdo marcados.

Atualmente, o módulo está na sandbox

milkovsky
fonte
0

Para o meu caso de uso, eu estava tentando desativar as guias verticais aplicadas na seção Opções de publicação em um formulário de edição de nó (já que esse era o único conjunto de campos ao qual um conjunto específico de usuários tem acesso):

// Place somewhere in MYMODULE_form_alter()...
$form['additional_settings']['#type'] = 'fieldset';
$form['additional_settings']['#collapsible'] = FALSE;
$form['options']['#collapsible'] = FALSE;

Para esclarecimento, você não apenas precisa definir additional_settings #collapsiblecomo FALSE, mas também todos os elementos devem ter o elemento #collapsible set toFALSE , in my case that was theoptions`.

tyler.frankenstein
fonte