Olá pessoal,
Mais uma vez estou com dúvidas e não consigo encontrar em lado nenhum a solução.
Estou a criar um questionário e para isso criei:
- tipo de conteúdo - questionário
- usei cck para os campos
nome
morada
telefone
etc
nº socio(node reference)
prémio(computed field)
Agora a minha dúvia é a seguinte: precisava de aproveitar o que foi preenchido no campo nº de socio(preenchido automaticamente ) para usar como argumento de uma view e preencher automaticamente um outro campo mais abaixo no formulário (premio) o resultado da view.Essa views recebe como argumento o conteúdo do campo nº de socio. Li que para conseguir fazer isso teria de usar computed field.
No computed code coloquei:
$node_field[0]['value'] =$node->field_socio[0]['view'];
No display format coloquei:
$display =views_embed_view('premio', 'default', $node_field_item['value']);
Mas não aparece nada.
Já estou à uns dias nisto e não consigo resolver.
O $node->field_socio[0]['view'] obtive atraves do módulo content template que me mostra as variáveis existentes no $body. Há alguma maneira mais directa de saber essas variáveis??
Sabem o que estou a fazer mal??
Sem mais...
sliderf
Comments
Não é bem assim
A julgar por isto e isto.
De qualquer forma a maneira boa de embeber views em templates/páginas é usando o panels.
Não me canso de o recomendar: é verdade :)
Esquecendo as views como é
Esquecendo as views como é que eu posso obter o valor de um campo cck e colocá-lo noutro durante o preenchimento de um formulário.
Sem mais...
sliderf
Recomendo Javascript. Se
Recomendo Javascript.
Se calhar, safas-te com este código.
Espero que ajude.
<< I tried others - still returned to Drupal. >>
O computed field serve para isso
mas a menos que haja código bastante elaborado, o que sucede é que o valor só é calculado depois da form ser submetida.
Donde da primeira vez não há valor calculado.
PS: é possível usando ajax fazer que um campo seja actualizado durante o preenchimento da form mas atenção que isso implica mexer na Form API e no mínimo usar um hook_form_alter em alternativa à FAPI há o ctools que é bem mais "simpático" para essas coisas.
PPS: Pode ser que haja um módulo que já faça algo nesse género. A indagar.
Com o código que o bmateus
Com o código que o bmateus recomendou consigo obter os valores através de javascript. Como faço para o passar para a view como argumento? É possível fazer isso?
Sem mais...
sliderf
Não tenho a certeza, mas para
Não tenho a certeza, mas para o passares para a view como argumento, ele tem de existir no url, acho eu... Assim, podes utilizar esse valor como "Context" na view.
Mas como não sei como é o flow de dados no teu site, fico por aqui.
Espero que ajude.
Abraços.
Bmateus
<< I tried others - still returned to Drupal. >>
Olá pessoal.Estou a tentar
Olá pessoal.
Estou a tentar implementar com ajax e com hook_alter_form. E sinceramente estou bastante perdido com isso.
Neste momento estou a tentar implementar uma cena muito simples que é: quando clico num determinado cck field e faria uma chamada ajax e retornava-me um hello.
Para criei um módulo e tenho o seguinte código.
/**
* Implementation of hook_menu().
*/
function socio_menu() {
$items = array();
$items['socio/numero'] = array(
'page callback' => 'socio_check_numero',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
function socio_form_alter(&$form, &$form_state, $form_id) {
}
/**
* Menu callback for AHAH requests.
*/
function socio_check_numero() {
return drupal_json(array('result' => TRUE, 'data' => "Hello"));
}
O que é que estou a fazer mal?
Sem mais...
Sliderf
Devel
Olha, eu uso e tem-me dado imenso jeito, o módulo devel.
Instalas o módulo e usas, se ainda não o estás a fazer, a função dpm(); (não esquecer das permissões para os users)
Esta função recebe a tua variável/objecto como argumento e gera numa determinada zona, o output. É um estilo de var_dump(), mas mais elegante. Com esta função poderás ver ao que precisas aceder para manipular.
Sim eu estou a usar. Foi
Sim eu estou a usar.
Foi assim que cheguei ao campo que pretendo. Se bem que não tenho bem a certeza se o estou a usar bem.
Retorna alguma coisa?
Ois,
Desculpa as perguntas...
- Está a retornar alguma coisa?
- Mas já limpaste a cache?
- Já tentaste aceder directamente? O que retorna?
- Estás a usar o D6, correcto?
Olá, Está a retornar alguma
Olá,
Está a retornar alguma coisa?
Estou a tentar receber esta mensagem -> return drupal_json(array('result' => TRUE, 'data' => "Hello"));
Sim
Quando faço isto $socio_form[0]['#default_value']['value']="Hello"; ele coloca o hello no campo. Por isso consigo aceder. É isto que querias saber?
Sim
Obrigado pela ajuda.
Sem mais...
sliderf
Vivas, Já tentaste aceder
Vivas,
Não era bem isso que estava a perguntar, era se acedendo directamente ao URL do ajax (socio/numero), o que retorna?
Diz A página solicitada não
Diz
A página solicitada não foi encontrada. Não retorna nada
Agora já retorna isto {
Agora já retorna isto
{ "result": true, "data": "Hello" }
Penso que o problema deve estar na chamada. Não deve estar a disparar o evento .
Alguma ideia ?
Sem mais...
sliderf
Este artigo pode ajudar
vivas,
Acho que este artigo te pode ajudar...
http://drupalsn.com/learn-drupal/drupal-tutorials/getting-going-ahah-and...
Olá Existe alguma maneira de
Olá
Existe alguma maneira de saber o nid quando estamos a criar o nó.
Obrigada
Acho que mais que saber o nid
Acho que mais que saber o nid do nó que estamos a criar, podes saber o nid do nó que vamos criar. Parece redundante, mas "es lo que hay..". Se o site é para vários utilizadores é uma informação sensível pois ao mesmo tempo vários podem estar a criar um nó.
Resumindo podes saber o nid do último nó criado e somas um para saber o nó seguinte, que é o que estás a criar...
print db_result(db_query_range("SELECT nid FROM {node} ORDER BY nid DESC", 0, 1));Nao sei se ha uma outra forma interna de saber isso, mas a questão é que o meu form output da isso:
$form = ([#id] => [node-form]
[nid] => array (
[#type] => [value]
[#value] => [] <---- não há nada!
)
[vid] => array (
[#type] => [value]
[#value] => []
)
[uid] => array (
[#type] => [value]
[#value] => [1]
)
[created] => array (
[#type] => [value]
[#value] => [1308516443]
)
[type] => array (
[#type] => [value] ....
Uma vez mais acho que vais ter que trabalhar com forms apis, alters e afins.....
Quando fazes um
Quando fazes um node_save($node);
Podes a seguir aceder ao nid que está preenchido em $node->nid
O NID é um indíce SQL
auto-incrementado que é um dos indíces da tabela
nodee a chave primária da mesma.CREATE TABLE
node(nidint(10) unsigned NOT NULL AUTO_INCREMENT,(...)
Como tal é impossível saber de antemão o
nid. Este impossível pode ser obviado se garantires que:Há uma e uma só pessoa a criar o nó e mais nenhuma operação de criação de nós está a ocorrer simultaneamente.
Usar um módulo que bloqueie a criação de nós quando um está a ser criado. Não se existe tal coisa. Calculo que sim. É procurar.
Para saber o valor do
nidelevado actual pode-se fazer:<?php// drupal 6: velhinho db_query.
$max_nid = db_result(db_query('SELECT MAX(nid) FROM {node}'));
?>
<?php// D7 o db_query funciona à mesma mas com a DBTNG em full force.
$query = db_select('node');
$query->addExpression('MAX(nid)');
$max_nid = $query->execute()->fetchField();
?>