Выделяем ноды экспортируем в Ворд Часть 2

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

Аватар пользователя yasik yasik 16 декабря 2008 в 17:02

Добрый день
Поводом к написанию даного поста была попытка внедрения механизма экспорта в word описанного вот здесь http://www.drupal.ru/node/13370
С чем я столкнулся надеюсь мой опыт поможет другим.
1. Куда у меня ушло куча времени на то что бы настроить операции. Проблема в том, что по ссылке http://idgroup.in.ua/prodagakvartir/edit нету закладки операции хотя есть все остальные изменить, клонировать, экспорт.
А по ссылке http://idgroup.in.ua/admin/build/views/NEW_PRa/edit есть вкладка операции не знаю, может это общеизвестный факт, но я помучался в поисках где же операции и как их настроить, прежде чем обнаружил это.
2. Мне пришлось патчить views, у меня вываливалась такая ошибка

* warning: implode() [function.implode]: Bad arguments. in /home/#####/www/public/sites/all/modules/views/modules/views_node.inc on line 698.
    * user warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')) AND ('applylocalizer'='applylocalizer') )' at line 1 query: SELECT node.nid, localizernode.language AS localizernode_language, node.title AS node_title, node.changed AS node_changed FROM node node LEFT JOIN localizernode localizernode ON node.nid = localizernode.nid LEFT JOIN localizernode loc ON loc.nid=node.nid LEFT JOIN(SELECT -100 AS weight, CAST('en' AS CHAR(10)) AS language UNION SELECT 1 AS weight, CAST('ru' AS CHAR(10)) AS language) lanw ON lanw.language=loc.language LEFT JOIN (select pid, MIN(weight) AS minweight from localizernode loc2 LEFT JOIN (SELECT -100 AS weight, CAST('en' AS CHAR(10)) AS language UNION SELECT 1 AS weight, CAST('ru' AS CHAR(10)) AS language) lanw2 on lanw2.language=loc2.language group by pid) loc1 ON loc.pid=loc1.pid WHERE (lanw.weight=loc1.minweight) AND ( (node.status = '1') AND (node.type IN ('page','page_with_links','products_list_page')) AND (node.nid IN ()) AND ('applylocalizer'='applylocalizer') ) in /home/#####/www/public/includes/database.mysqli.inc on line 151.

Решение описано здесь http://drupal.org/node/263855 патч прикреплен.
3. Мне не пришлось конвертировать контент из UTF в Win1251 более того при конвертации префикс м2 2 в верхнем регистре портится в конечном файле и выглядит так 00м2 так что я выкинул эту функцию конвертации поэтому ни какие правки в файл views_bonus_export.module вносить не пришлось.
4. Автор предлагает переделать функцию node delete по сути убрав функцию удалить ноду, а вдруг она понадобится в другом виде ?

Его функцию можно вставить назвав ее так чтоб название отражало назначение функции например

function views_bulk_operations_export_word_nodes($nodes)

Обязательно  определив  ее  вот  здесь,  сделав  для  нее  чек  бокс  на  закладе  операции
/**
 * Implementation of hook_node_operations().
 */

function views_bulk_operations_node_operations() {
  $operations = array(
    'bulk_delete' => array(
      'label' => t('Delete'),
      'callback' => 'views_bulk_operations_delete_nodes',
    ),
+   'bulk_export' => array(
+    'label' => t('Export to Word'),       /*  пишем   на   кнопочке  
+     'callback' => 'views_bulk_operations_export_word_nodes',  /*пишем  название функции
+  ),
);
  return $operations;
}

А дальше есть еще одна проблема тут я прощу помощи у сообщества дело все в том что предложенная Иваном (ака куку) функция прекрасно работает, но она жестко привязана к одному виду.

function views_bulk_operations_delete_nodes($nodes) {
  $url = '{вид который дает_doc}/';  
  $temp = '';
 
  foreach ($nodes as $nid) {
    $temp = $nid;
    settype($temp, "string");
    $url = $url.$temp.'+';
  }
  $url = substr($url, 0, strlen($url)-1);
  $url = $url.'/doc';
  drupal_goto($url);
}

Проблема в этой строке $url ={вид который дает_doc}’
Я пробовал поменять так $url = $view->url.’/’; но не помогло
Было бы классно как то передать в функцию значение $view->url

В итоге я сделал извращенческое решение создав четыре функции по одной под каждый вид и четыре чек бокса на панели операции. Работает, но это же не правильно мне еще надо виды с печатью.

Как сделать правильно ?

ВложениеРазмер
Файл views_node.inc-nid_arg_handling-pastk.patch957 байт

Комментарии

Аватар пользователя kyky kyky 17 декабря 2008 в 6:50

а вы попробуйте извлекать адрес вида как аргумент:
например www.site.ru/vid

$views_url = arg(1)

значение $views_url будет равно "vid"

или:
например www.site.ru/vid/cars

$views_url = arg(1). '/' .arg(2)
значение $views_url будет равно "vid/cars"

Аватар пользователя yasik yasik 3 августа 2009 в 17:31

kyky wrote:
а вы попробуйте извлекать адрес вида как аргумент:
например www.site.ru/vid

$views_url = arg(1)

"

Спасибо большое помогло

только наверно лучше arg(0)