Anexando Arquivos do Servidor Existentes ao Campo de Arquivos

7

Como você define um caminho de arquivo existente para um campo de arquivo no Drupal 7? A única opção que vejo é fazer upload do arquivo novamente.

No Drupal 6, o FileField Sources parece fazer isso.

Os caminhos FileField ou IMCE, juntamente com o campo arquivo, permitem a atribuição de arquivos do servidor?
Existe uma API para gerenciar programaticamente os campos de arquivo?

Editar
Acabei de descobrir que tudo isso pode ser feito com o módulo de mídia. Eu também tenho o mediaelement instalado. No entanto, não é completamente intuitivo, então, aqui estão os passos que eu segui:

Importar para a biblioteca de mídia: /admin/content/media/import

Crie um mediafile assetcampo. Isso permite que você se conecte a partir da biblioteca.

Os formatos de exibição (exemplo de áudio) estão em /admin/config/media/types/manage/audio/display/, em vez do tipo de conteúdo "gerenciar exibição", que fornece apenas "grande", "pequeno", "visualização" etc.

brian_d
fonte

Respostas:

3

Eu tentaria Media e seus módulos associados. É uma evolução do FileField Sources e fornece quase todo o mesmo tipo de funcionalidade, embora com os campos do Drupal 7.

Kim Pepper
fonte
3

Escolhi o IMCE em combinação com o IMCE for FileField (D7) porque o cliente precisava de uma seleção rápida e ininterrupta de arquivos carregados com ftp - e isso sem duplicá-los para cada nó.

Tanto quanto eu vejo, o Filefield Sources sempre duplica os arquivos anexados no momento. O importador fornecido pela Media também faz isso.

phils
fonte
3

O FileField Sources foi portado para o D7 e é ótimo. Também existe um módulo chamado Visual select file, que adiciona uma abbiliti para uma boa seleção de arquivos existentes baseada em Views (boa para imagens).

Bobík
fonte
2

Eu posso ajudá-lo a anexar um arquivo a um arquivo. No entanto, não tentei obter um widget de preenchimento automático para obter o arquivo que você deseja anexar ao campo de arquivo.

você pode usar file_get_contents()para pegar o arquivo que deseja anexar e usar file_save_data para inseri -lo no Drupal. O problema é que você precisará alterar o status do arquivo que você acabou de adicionar para poder anexá-lo a um nó posteriormente. Caso contrário, você receberá um erro de validação.

$file = file_save_data($data, $destination = NULL, $replace = FILE_EXISTS_RENAME);

db_update('file_managed')
  ->fields(array('status' => 0))
  ->condition('fid', $file->fid, '=')
  ->execute();

Depois que o formulário for enviado com o fid, o valor do campo de arquivo que você deseja que o arquivo anexado ao status dos arquivos gerenciados será atualizado automaticamente.

Confira http://api.drupal.org/api/drupal/includes--file.inc/group/file/7 para obter mais referências.

Jepedo
fonte
Isso parece muito promissor. Duas perguntas rápidas: 1) Para conectar a um nó posteriormente, $node = node_load($nid); $node->field_myfilefield[$node->language][0] = $file; node_save($node); deve funcionar? 2) Suponho que devo definir o status novamente 1após anexar ao nó? Ou faz node_saveisso por mim? Obrigado!
brian_d
Suas suposições estão corretas sobre como salvar o nó. No entanto, ao fazer isso, o status volta para 1 automaticamente, para que você não precise se preocupar com isso manualmente. Eu lutei com isso por um tempo, pois não havia uma função para adicionar um arquivo à tabela de arquivos gerenciados sem definir o status como 1. Eu o usei em uma operação em lote que baixa arquivos de outro servidor e os anexa a nós no meu site Drupal. Por um lado, não se você estiver usando um lote, você não poderá usá- file_get_contents()lo. Você deveria usar drupal_http_request().
Jepedo
Pensando bem, não tenho certeza se node_save altera o status para 1. No exemplo ao qual eu estava me referindo, usei drupal_form_submit () para garantir que o node_save executou a validação. Nesse caso, o status foi atualizado para 1 automaticamente. Pode ser necessário atualizá-lo manualmente no seu caso. As chances são de que node_save () se comportará da mesma maneira.
Jepedo
1

Você sempre pode usar a abordagem Arquivo como Nó e usar um campo Referência de Nó + Formadores Personalizados (para renderizar o Nó como um Arquivo) para fazer isso, o que permitiria atualizar o nó Arquivo e ter todas as referências desse nó Arquivo atualizadas. de maneira geral.

No D6, você também pode usar Relacionamentos de nós para fornecer um campo Referência da biblioteca de arquivos e formatadores de 4 nós para formatar o nó como qualquer formatador de FileField disponível.

Decifrar
fonte