Здравствуйте, помогите советом пож. Есть блок в котором текстфиелд и кнопка сабмит. В поле вводим номер ноды. Нужно вывести в блоке тизер, таймстамп и ид юзера. Не знаю как передать в блок результат выборки. С ретёрнами не разобрался :(. В друпале нуб.
// $Id$ Ivash Exp $
function ivash_block($op='list', $delta=0, $edit=array()){
switch ($op){
case 'list':
$blocks[0]['info']=t('info show');
return $blocks;
case 'view':
$blocks['subject']=drupal_get_form('ivash_block_form');
$blocks['content']=t($str);
return $blocks;
}
}
function ivash_block_form($form_state){
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Node ID'),
'#size' =>10,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
'#submit' => array('ivash_block_form_submit'),
);
return $form;
}
function ivash_block_form_submit($form_id, &$form_state){
$nn = $form_state['values']['name'];
$check = db_query("SELECT * FROM {node_revisions} WHERE nid = %d", $nn);
$check1 = db_fetch_array($check);
if ($nn != $check1['nid']){
drupal_set_message(t('Cant find node'));
}
else
{
$result = db_query("SELECT *
FROM {node_revisions}
WHERE nid = %d
", $nn);
$result1=db_fetch_array($result);
$teas=$result1['teaser'];
$user=$result1['uid'];
$time=$result1['timestamp'];
$str=($teas.' '.$user.' '.$time);
}
return $str;
}
Комментарии
<?php
// $Id$ Ivash Exp $
function ivash_block($op='list', $delta=0, $edit=array()){
switch ($op){
case 'list':
$blocks[0]['info']=t('info show');
return $blocks;
case 'view':
$blocks[0]['subject'] = t('Search node by nid');
$blocks[0]['content'] = drupal_get_form('ivash_block_form');
return $blocks;
}
}
function ivash_block_form($form_state){
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Node ID'),
'#size' =>10,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
$form['output'] = array(
'#type' => 'markup',
'#value' => is_numeric($form_state['values']['name']) ? node_view(node_load($form_state['values']['name']), TRUE, FALSE, FALSE) : '',
);
return $form;
}
?>
Можно конечно не использовать node_view, node_load, а сделать своим запросом.
спасибо, но так не работает, получается что не проходит проверка is_numeric. И так не получится вывести таймстамп и ид юзера. Подскажите пожалуйста каким образом передать результат выборки в $form['values']['output']. Туда вроде нужно если я правильно понимаю
тогда так:
<?php
// $Id$ Ivash Exp $
function ivash_block($op='list', $delta=0, $edit=array()){
switch ($op){
case 'list':
$blocks[0]['info']=t('info show');
return $blocks;
case 'view':
$blocks[0]['subject'] = t('Search node by nid');
$blocks[0]['content'] = drupal_get_form('ivash_block_form');
return $blocks;
}
}
function ivash_block_form($form_state){
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Node ID'),
'#size' =>10,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
$form['output'] = array(
'#type' => 'markup',
'#value' => ((int)$form_state['values']['name']) ? node_view(node_load($form_state['values']['name']), TRUE, FALSE, FALSE) : '',
);
return $form;
}
?>
спасибо ещё раз, но толи у меня с руками чтото, толи не знаю, ввожу номер ноды в поле, и ничего не происходит, если убрать проверку то выводит "n/a". А вот ещё, форма отображается только если в строчках
$blocks[0]['subject'] = t('Search node by nid');
$blocks[0]['content'] = drupal_get_form('ivash_block_form');
убрать [0].
<?php
// $Id$ Ivash Exp $
function ivash_block($op='list', $delta=0, $edit=array()){
switch ($op){
case 'list':
$blocks[0]['info']=t('info show');
return $blocks;
case 'view':
if($delta == 0) {
$block['subject'] = t('Search node by nid');
$block['content'] = drupal_get_form('ivash_block_form');
return $block;
}
}
}
function ivash_block_form($form_state, $edit){
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Node ID'),
'#size' =>10,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
$form['output'] = array(
'#type' => 'markup',
'#value' => ((int)$edit['name']) ? node_view(node_load($edit['name']), TRUE, FALSE, FALSE) : '',
);
return $form;
}
?>
А так?
так вот ошибка "warning: Missing argument 2 for ivash_block_form() in X:\home\localhost\www\sites\all\modules\ivash\ivash.module on line 18." это где
function ivash_block_form($form_state, $edit){
А сделать выборку скл запросами и присвоить значение в
$form['output'] = array(
'#type' => 'markup',
'#value' =>
не получится? Я пытался сделать по нажатию нопки функцию, где результатом является строка с тизером, таймштампом и юзер идом, но не могу понять как эту переменную передать в форму или хотябы просто вывести в блоке
<?php
// $Id$ Ivash Exp $
function ivash_block($op='list', $delta=0, $edit=array()){
switch ($op){
case 'list':
$blocks[0]['info']=t('info show');
return $blocks;
case 'view':
if($delta == 0) {
$block['subject'] = t('Search node by nid');
$block['content'] = drupal_get_form('ivash_block_form');
return $block;
}
}
}
function ivash_block_form($form_state){
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Node ID'),
'#size' =>10,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
$form['output'] = array(
'#type' => 'markup',
'#value' => ((int)$form_state['post']['name']) ? node_view(node_load($form_state['post']['name']), TRUE, FALSE, FALSE) : '',
);
return $form;
}
?>
Так еще.
Да, в value можно все, что хочешь вставить, например var_export($form_state, TRUE) туда вставить и посмотреть, что там есть. А то так по памяти не помню...в 5-ке так ка до этого написал работало, теперь нет.
ничего не происходит:(, проверку не проходит. Спасиб за терпение), чтото никак работать не хочет.
<?php
function ivash_block_form($form_state){
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Node ID'),
'#size' =>10,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
$form['output'] = array(
'#type' => 'markup',
'#value' => var_export($form_state, TRUE),
);
return $form;
}
?>
Попробуйте выдать $form_state таким образом и посмотреть, потом можно $_POST также посмотреть.
ввожу значение, нажимаю на кнопку, выводится
array ( 'storage' => NULL, 'submitted' => false, 'post' => array ( ), )
если $_POST то
array ( )
почему то пустые.
А когда засабмитишь форму, то что выводится, если ввести nid?
Не легче сделать блок Views с аргументом по node->nid?
тоже самое
array ( 'storage' => NULL, 'submitted' => false, 'post' => array ( ), )
даже если значение по умолчанию поставить.
Дело в том что мне нужно чтобы этот модуль ни от чего не зависел. Независимое решение нужно.
А через AHAH возможно это сделать?
сейчас пробую сделать многошаговую ворму, выводить только при создании формы, если не ставить проаерку. а по кнопке уже не выводиться
// $Id$ Ivash Exp $
function ivash_block($op='list', $delta=0, $edit=array()){
switch ($op){
case 'list':
$blocks[0]['info']=t('info show');
return $blocks;
case 'view':
$blocks['subject'] = t('Search node by nid');
$blocks['content'] = drupal_get_form('ivash_block_form');
return $blocks;
}
}
function ivash_block_form($form_state,$form_values=NULL){
$form_state['rebuild'] = TRUE;
$form['#multistep'] = TRUE;
$form['#redirect'] = FALSE;
if (!isset($_SESSION['go'])){
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Node ID'),
'#size' =>10,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
'#submit'=>array('ivash_block_form_submit')
);
}
else
{
$form['name'] = array(
'#type' => 'textfield',
'#title' => t('Node ID'),
'#size' =>10,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
'#submit'=>array('ivash_block_form_submit')
);
$form['output'] = array(
'#type' => 'item',
'#value' => ivash_block_form_submit($form_id, &$form_state, $form_values=array()),
);
}
return $form;
}
function ivash_block_form_submit($form_id, &$form_state, $form_values=array()){
$nn=$form_state['values']['name'];
$_SESSION['go']=$nn;
$check = db_query("SELECT * FROM {node_revisions} WHERE nid = %d", $nn);
$check1 = db_fetch_array($check);
if ($nn != $check1['nid']){
drupal_set_message(t('Cant find node'));
}
else
{
$result = db_query("SELECT teaser, uid, timestamp
FROM {node_revisions}
WHERE nid = %d
", $nn);
while ($data = db_fetch_object($result)) {
$row = array();
$row[] = array('data' => $data->teaser);
$row[] = array('data' => $data->uid);
$row[] = array('data' => $data->timestamp);
$rows[] = $row;
}
$header = array(t('Teaser'), t('UID'),t('Timestamp'));
$gogo=theme('table',$header,$rows);
return $gogo;
}
}
<?php
// $Id$ Ivash Exp $
function ivash_block_block($op='list', $delta=0, $edit=array()){
switch ($op){
case 'list':
$blocks[0]['info']=t('info show');
return $blocks;
case 'view':
if($delta == 0) {
$block['subject'] = t('Search node by nid');
$block['content'] = drupal_get_form('ivash_block_form');
return $block;
}
}
}
function ivash_block_form($form_state){
$form['name'] = array(
'#type' => 'textfield',
'#default_value' => $_SESSION['name'] ? (int)$_SESSION['name'] : '',
'#title' => t('Node ID'),
'#size' =>10,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
if($node = node_load($_SESSION['name'])) {
$form['output'] = array(
'#type' => 'markup',
//'#value' => var_export($_SESSION['name'], TRUE),
'#value' => node_view($node, TRUE, FALSE, FALSE),
);
}
return $form;
}
function ivash_block_form_submit($form, &$form_state) {
//var_export($form_state['values']['name'], TRUE);
//form_set_error('',var_export($form_state['values']['name'], TRUE)); return false;
$_SESSION['name'] = $form_state['values']['name'];
}
?>
Так работает
Под 6-ку правильнее будет сохранять не в сессию, а в $form_state['storage'], вот так:
<?php
// $Id$ Ivash Exp $
function ivash_block_block($op='list', $delta=0, $edit=array()){
switch ($op){
case 'list':
$blocks[0]['info']=t('info show');
return $blocks;
case 'view':
if($delta == 0) {
$block['subject'] = t('Search node by nid');
$block['content'] = drupal_get_form('ivash_block_form');
return $block;
}
}
}
function ivash_block_form($form_state){
$form['name'] = array(
'#type' => 'textfield',
'#default_value' => $form_state['storage']['name'] ? (int)$form_state['storage']['name'] : '',
'#title' => t('Node ID'),
'#size' =>10,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
);
if($node = node_load($form_state['storage']['name'])) {
$form['output'] = array(
'#type' => 'markup',
//'#value' => var_export($_SESSION['name'], TRUE),
'#value' => node_view($node, TRUE, FALSE, FALSE),
);
}
return $form;
}
function ivash_block_form_submit($form, &$form_state) {
['name'], TRUE)); return false;
$form_state['storage']['name'] = $form_state['values']['name'];
}
?>
Спасибо огромное, разобрался)