Computed field e views

Events happening in the community are now at Drupal community events on www.drupal.org.
sliderf's picture

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

perusio's picture

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 é

sliderf's picture

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

bmateus's picture

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

perusio's picture

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

sliderf's picture

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

bmateus's picture

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

sliderf's picture

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) {

switch($form_id) {
    case 'socio_node_form':

        $socio_form = &$form['field_teste_ajax'];           
        $suffix = isset($socio_form[0]['#suffix']) ? $socio_form[0]['#suffix'] : '';
        $socio_form[0]['#suffix'] = $suffix . '<div id="socio-name-wrapper"></div>';
        $socio_form[0]['#ahah'] = array(
        'path' => 'socio/numero',
        'wrapper' => 'socio-name-wrapper',
        'progress' => 'none',
        'event' => 'blur',
        );

    break;
}

}

/**
* 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

paulo_graca's picture

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

sliderf's picture

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?

paulo_graca's picture

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

sliderf's picture

Olá,

Está a retornar alguma coisa?

Estou a tentar receber esta mensagem -> return drupal_json(array('result' => TRUE, 'data' => "Hello"));

  • Mas já limpaste a cache?

Sim

  • Já tentaste aceder directamente? O que retorna?

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?

  • Estás a usar o D6, correcto?
    Sim

Obrigado pela ajuda.

Sem mais...
sliderf

Vivas, Já tentaste aceder

paulo_graca's picture

Vivas,

Já tentaste aceder directamente? O que retorna?

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?

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

sliderf's picture

Diz

A página solicitada não foi encontrada. Não retorna nada

Agora já retorna isto {

sliderf's picture

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

Olá Existe alguma maneira de

sliderf's picture

Olá

Existe alguma maneira de saber o nid quando estamos a criar o nó.

Obrigada

Acho que mais que saber o nid

kundu's picture

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

hernani's picture

Quando fazes um node_save($node);

Podes a seguir aceder ao nid que está preenchido em $node->nid

O NID é um indíce SQL

perusio's picture

auto-incrementado que é um dos indíces da tabela node e a chave primária da mesma.

CREATE TABLE node (
  nid int(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:

  1. 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.

  2. 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 nid elevado 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();
?>

Portugal

Group categories

Classificação

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: