[Решено, спасибо Dan] Дизайн кнопки

Главные вкладки

Аватар пользователя lopata24 lopata24 15 октября 2009 в 14:13

Вот собственно сделал дизайн всех кнопок, как хочу, но не получается заключить одну единственную в те самый div`ы, которые мне нужны.
При удалении ноды

Не могу заставить кнопку Cancel плясать как мне надо. при этом нашел, что можно ее удалить или изменить в файле node.pages.inc
Помогите, как или где ее стилизовать?

Комментарии

Аватар пользователя GDI@drupal.org GDI@drupal.org 16 октября 2009 в 20:22

Насколько я вижу вторая это ссылка, а никак не кнопка. Если вы знаете как ее изменить, так и измените ее на кнопку со ссылкой.

Аватар пользователя romass romass 17 октября 2009 в 13:56

Вы себе на ровно месте создали проблему. Вы можете через css темизовать эту ссылку так, что она ничем не будет отличатся от обычной кнопки.

Аватар пользователя romass romass 17 октября 2009 в 14:53

Сорри, но я не могу понять зачем здесь использовать дополнительный див.
Вот вам готовое решение:

ссылка{
display: block;
background-color: #ddd;
border: 1px solid #aaa;
color:#444;
text-decoration: none;
cursor: default;
float: left;
margin-left: 5px;
padding:0 10px;
}

кнопка {
float: left;
}

Аватар пользователя GDI@drupal.org GDI@drupal.org 17 октября 2009 в 14:55

Внутрь тэга <a></а> надо вставить код кнопки, назначение кнопке можно не указывать или указать пустое назначение. Это должно работать в чистом html, но я не знаю, можно ли заставить Друпал так делать.

Аватар пользователя lopata24 lopata24 17 октября 2009 в 23:49

прошу прощения, в последнем моем посте не опубликовался кусок кода почему-то. Начну сначала, ибо понял, что не все объяснил правильно!
1) Итак, скриншот, который в первом посте, отображает ситуацию при удалении ноды. Задача, сделать из ссылки "Cancel" - кнопку "Cancel".
2) Насколько я разобрался код отвечающий за этот кусок лежит в файле node.page.inc
Вот кусок этого кода

<?phpfunction node_delete_confirm(&$form_state, $node) {
  $form['nid'] = array(
    '#type' => 'value',
    '#value' => $node->nid,
  );

  return confirm_form($form,
    t('Are you sure you want to delete %title?', array('%title' => $node->title)),
    isset($_GET['destination']) ? $_GET['destination'] : 'node/'. $node->nid,
    t('This action cannot be undone.'),
    t('Delete'),
    t('Cancel')
  );
}?>

3) Пробовал поколдовать со строкой, где этот Cancel, но ничего не выходит. Обычно ругается на синтаксис, когда я вокруг div ставлю. При этом заметил такую особенность, что например поменять местами Delete и Cancel, то Cancel становится кнопкой а Delete ссылкой.

Так вот как в этом коде темизировать это самое Cancel? или в каком другом месте?

to romass
в css разберусь, что написать, главное не ясно, как назначить ей то, что я пропишу в стиле?

Аватар пользователя GDI@drupal.org GDI@drupal.org 18 октября 2009 в 16:27

Это стандартная форма друпала, потому надо копать в сторону темизации форм. Искать где эта форма темизируется и переопределить свою функцию для темизации.

Аватар пользователя lopata24 lopata24 19 октября 2009 в 0:54

дык дело в том, что темизируется она также, как и все остальные ссылки в моей теме. Так я знаю, как сделать ссылку Cancel кнопкой, но тогда все ссылки будут такие же (
а мне нужно, чтобы только этой ссылке задать свой дизайн

Аватар пользователя lopata24 lopata24 20 октября 2009 в 0:01

Dan
спасибо уже ближе чувствую подкрался я с Вашей помощью, но вот ставлю

  $form['actions']['submit'] = array('#type' => 'submit', '#value' => $yes ? $yes : t('Confirm'));
  $form['actions']['cancel'] = array('#type' => 'submit', '#value' => $no ? $no : t('Cancel'));

и эта моя ссылка-кнопка не возвращает документ, а удаляет (

Аватар пользователя Dan Dan 20 октября 2009 в 5:32

Куда ставите? Надеюсь не котят душите? Smile
Я думаю надо что-то типа:

function ИМЯ-ВАШЕГО-МОДУЛЯ_form_alter(&$form, &$form_state, $form_id) {
  if(in_array($form_id, array('node_delete_confirm','user_confirm_delete'))){
    $form['actions']['cancel']['#type'] = 'submit';
    $form['actions']['cancel']['#value'] = t('Cancel');
    $form['actions']['cancel']['#submit'] = array('ИМЯ-ВАШЕГО-МОДУЛЯ_cancel_submit');
  }
}
function ИМЯ-ВАШЕГО-МОДУЛЯ_cancel_submit($form, $form_state){
  switch($form_state['values']['form_id']){
    case 'user_confirm_delete': drupal_goto('user/'.$form_state['values']['_account']->uid); break;
    case 'node_delete_confirm': drupal_goto('node/'.$form_state['values']['nid']); break;
  }
}

А удаляет потому что функция обработчика не проверяет имя кнопки, ибо подразумевается что она одна.

Аватар пользователя lopata24 lopata24 20 октября 2009 в 10:35

Dan
Благодарствую! С Вашей помощью задушил кого нужно Wink

p.s. всем остальным тоже спасибо. Сам виноват, не сразу объяснил, что нужно и своими кривыми руками не туда смотрел ))

Аватар пользователя lopata24 lopata24 1 декабря 2009 в 11:19

Dan
Подскажите еще ,как решить эту же проблему с og?
Там аналогичная ситуация при вступлениии и выходе из группы отображается "отменить" ссылкой
Сам потыркал по аналогии и не получается
заранее спасибо

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 1 декабря 2009 в 12:07

Вот товарищи, нагуглил кое-чего, но это форма поиска, по-этому соответственно, все значения поменять на свои, посмотреть их можно в коде страницы, лучше Firebug'ом.

<?php
function phptemplate_preprocess_search_theme_form(&$variables) {
  // The variable
 $form['submit'] = array(
  '#type' => 'image_button',
  '#value' => t('Search'),
  '#attributes' => array(
    'class' => 'form-submit',
    'src' => 'images/submitbutton.png',
  ),
);
 
  unset($variables['form']['search_theme_form']['#printed']);
  $variables['search']['search_theme_form'] = drupal_render($variables['form']['search_theme_form']);
  $variables['search_form'] = implode($variables['search']);
}
?>

Пруфлинк http://drupal.org/node/316740 , ошибку комрада yo2lux поправил

Аватар пользователя lopata24 lopata24 1 декабря 2009 в 12:14

вот и тот же темный лес. Аналогией с прошлым решение и делал
как именно сделать все эти $form и $variables для Cancel og? (

Аватар пользователя lopata24 lopata24 1 декабря 2009 в 12:32

Хотя бы толкните. Оригинал ниже

/**
 * Confirm og membership form
 */

function og_confirm_subscribe($form_state, $gid, $node, $account) {
  $form['gid'] = array('#type' => 'value', '#value' => $gid);
  $form['account'] = array('#type' => 'value', '#value' => $account);
  if ($node->og_selective == OG_MODERATED) {
    $form['request'] = array(
      '#type' => 'textarea',
      '#title' => t('Additional details'),
      '#description' => t('Add any detail which will help an administrator decide whether to approve or deny your membership request.')
    );
  }
  else {
    $form['request'] = array(
      '#type' => 'value',
      '#value' => '',
   );
 }
 return confirm_form($form,
                t('Are you sure you want to join the group %title?', array('%title' => $node->title)),
                'node/'. $node->nid, ' ',
                t('Join'), t('Cancel'));
}
Аватар пользователя lopata24 lopata24 2 декабря 2009 в 12:39

сделал так

function og_confirm_subscribe($form_state, $gid, $node, $account) {
  $form['gid'] = array('#type' => 'value', '#value' => $gid);
  $form['account'] = array('#type' => 'value', '#value' => $account);
  if ($node->og_selective == OG_MODERATED) {
    $form['request'] = array(
      '#type' => 'textarea',
      '#title' => t('Additional details'),
      '#description' => t('Add any detail which will help an administrator decide whether to approve or deny your membership request.')
    );
  if($form_id == 'confirm_form'){
    $form['actions']['cancel']['#type'] = 'submit';
    $form['actions']['cancel']['#value'] = t('Cancel');
    $form['actions']['cancel']['#submit'] = array('og_cancel_submit');
  }

  }
  else {
    $form['request'] = array(
      '#type' => 'value',
      '#value' => '',
   );

 }

 return confirm_form($form,
                t('Are you sure you want to join the group %title?', array('%title' => $node->title)),
                'node/'. $node->nid, ' ',
                t('Join'), t('Cancel'));
}

function og_cancel_submit($form, $form_state){
  switch($form_state['values']['form_id']){
    case 'user_confirm_delete': drupal_goto('user/'.$form_state['values']['_account']->uid); break;
    case 'node_delete_confirm': drupal_goto('node/'.$form_state['values']['nid']); break;
  }
}

не знаю, правильно ли, но понял так. В итоге все как было ((( не туда наверное вставил... или не так?!

Аватар пользователя lopata24 lopata24 2 декабря 2009 в 16:01

пробовал в нем.
переопределять что, мне не понятно. Понял, что отвечает этот кусок за то, что мне нужно. А как с ним управится не разобрался, душил котят пока что. А вообще, конечно, в templates все пропишу, когда будет ясно, что... Дык что не так я сделал, подскажите?

Аватар пользователя lopata24 lopata24 2 декабря 2009 в 16:20

прописал в tempale.php

function phptemplate_og_form_alter(&$form, &$form_state, $form_id) {
 if($form_id == 'confirm_form'){
    $form['actions']['cancel']['#type'] = 'submit';
    $form['actions']['cancel']['#value'] = t('Cancel');
    $form['actions']['cancel']['#submit'] = array('og_cancel_submit');
  }
}
function phptemplate_og_cancel_submit($form, $form_state){
  switch($form_state['values']['form_id']){
    case 'user_confirm_delete': drupal_goto('user/'.$form_state['values']['_account']->uid); break;
    case 'node_delete_confirm': drupal_goto('node/'.$form_state['values']['nid']); break;
  }
}

не помогло. Sad
если не трудно, стукните 301068553

Аватар пользователя lopata24 lopata24 3 декабря 2009 в 15:01

добавляю этот код, он ругается на строку, где уже есть функция function og_form_alter
при удалении этой функции, ничего не происходит, а отвечает за вывод, как я писал выше function og_confirm_subscribe

=\

Аватар пользователя Dan Dan 4 декабря 2009 в 13:23

Делаем новый модуль. Называем его lopata24.

Создаём файл lopata24.info со следующим содержимым:

name = lopata24
description = Здесь описание модуля
version = 6.x-1.x
core = 6.x

Создаём файл lopata24.module:

<?php
function lopata24_form_alter(&$form, &$form_state, $form_id) {
if($form_id == 'confirm_form'){
$form['actions']['cancel']['#type'] = 'submit';
$form['actions']['cancel']['#value'] = t('Cancel');
$form['actions']['cancel']['#submit'] = array('lopata24_cancel_submit');
}
}
function lopata24_cancel_submit($form, $form_state){
drupal_goto('node');
}
?>

Смотрим, что происходит

Аватар пользователя Dan Dan 8 декабря 2009 в 14:07

Вот такой код получился:
<?php
function submit_form_alter(&$form, &$form_state, $form_id) {
if(in_array($form_id, array('node_delete_confirm','user_confirm_delete', 'og_confirm_subscribe'))){
$form['actions']['cancel']['#type'] = 'submit';
$form['actions']['cancel']['#value'] = t('Cancel');
$form['actions']['cancel']['#submit'] = array('submit_cancel_submit');
}
}
function submit_cancel_submit($form, $form_state){
switch($form_state['values']['form_id']){
case 'user_confirm_delete': drupal_goto('user/'.$form_state['values']['_account']->uid); break;
case 'og_confirm_subscribe': drupal_goto('node/'.$form_state['values']['gid']); break;
case 'node_delete_confirm': drupal_goto('node/'.$form_state['values']['nid']); break;
}
}
?>
Хотя решать эту задачу надо всё таки через переопределение элементов confirm_form.