Задавайте вопросы про Drupal - 2

J
На сайте с 13.08.2008
Offline
54
#1191

Заказал одному парню модуль экспорта в Яндекс-маркет; модуль получил, и даже валидацию проходит, но есть несколько косяков.

Например, надо в тег <vendor></vendor> поместить название поставщика, и взять его из поля таксономии field_svet (для контента svet - строка 97) и из поля field_radiator (для контента radiator - строка 96).

Подскажите плиз как сделать.

<?php


function p($var) {
drupal_set_message('<pre>'.check_plain(print_r($var,1)).'</pre>');
}


function yml_export_menu() {
$items['admin/config/system/yml_generate'] = array(
'title' => 'Генерация YML',
'page callback' => 'yml_export_yml_generate_callback',
'access callback' => 'yml_export_access_callback',
);

return $items;
}


function yml_export_permission() {
return array(
'yml_export_generate' => array(
'title' => t('Генерация YML'),
'description' => t(''),
),

);
}


function yml_export_access_callback(){
return user_access('yml_export_generate');
}


function yml_export_get_category_yml(){
$types = yml_export_content_types_name();
foreach ($types as $i=>$val) {
$output .= '<category id="'.($i+1).'">'.$val.'</category>';
};
return $output;
}


function yml_export_yml_pictures($node){
$output = '';
foreach ($node->field_foto['und'] as $i=>$val) {
$output .= '<picture>'.file_create_url($val['uri']).'</picture>';
};

return $output;
}


function yml_export_yml_generate_callback(){
return render(drupal_get_form('yml_export_yml_generate_form'));
}


function yml_export_yml_generate_form($form, &$form_state) {
$form['submit'] = array(
'#type' => 'submit',
'#value' => 'Сгенерировать YML',
'#prefix' => '<br></br>',
'#suffix' => '<br></br>'.l('Ссылка на YML-файл', drupal_get_path('module', 'yml_export').'/products.yml', array(
'attributes' => array(
'target' => '_blank',
),
'query' => array(
'time' => time()
)
)),
);
return $form;
}


function yml_export_yml_category_id($node){
$array = $node->field_kat['und'];
end($array);
$key = key($array);
return $node->field_kat['und'][$key]['tid'];
}


function yml_export_content_types_name(){
return array(
'Радиаторы',
'Свет',
);
}


function yml_export_content_types(){
return array(
'radiator',
'svet',
);
}


function yml_export_yml_generate_form_submit($form, &$form_state) {
// Подготавливаем данные для операций

$nodes = db_select('node', 'n')
->fields('n', array('nid'))
->condition('n.type', yml_export_content_types(), 'IN')
->condition('n.status', 1)
// ->range(0, 2)
->execute();

$operations = array();

// Создаём массив с операциями.
// Каждая операция будет выполнена в отдельном http запросе.
foreach ($nodes as $node) {
$operations[] = array('yml_export_yml_generate', array($node->nid));
}

$batch = array(
// Массив операций и их параметров
'operations' => $operations,
// Функция, которая будет выполнена после окончания всех операций
'finished' => 'yml_export_yml_generate_form_finished',
// Заголовок страницы с прогресс баром.
// Опционально, по умолчанию t('Processing')
'title' => 'Генерация YML',
// Сообщение, показываемое при инициализации.
// Опционально, по умолчанию t('Initializing.')
'init_message' => 'Подготовка данных',
// Сообщение, показывемое при выполнении операций.
// Опционально, по умолчанию t('Completed @current of @total.')
'progress_message' => 'Выполнено @current из @total.',
// Сообщение показываемое при ошибке выполнения операции.
// Опционально, по умолчанию t('An error has occurred.')
'error_message' => 'Произошла ошибка.',
);

global $base_url;

variable_set('yml_file','<?xml version="1.0" encoding="utf-8"?><!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="'.date('Y-m-d H:i').'">
<shop>
<name>'.variable_get('site_name','').'</name>
<company>SIRIUS</company>
<url>'.$base_url.'</url>
<platform>Drupal</platform>
<version>7</version>
<email>'.variable_get('site_mail','').'</email>

<currencies>
<currency id="RUR" rate="1"/>
</currencies>

<categories>
'.yml_export_get_category_yml().'
</categories>

<offers>

');

batch_set($batch);
batch_process($redirect = NULL, $url = 'batch', $redirect_callback = 'drupal_goto');
// Если Batch API используется не из _submit функции,
// то дополнительно нужно вызвать batch_process();
}


function yml_export_yml_generate($nid, &$context) {
// Производим манипуляции над нодами
$node = node_load($nid);

$product = db_select('uc_products', 'p')
->fields('p')
->condition('p.nid', $nid)
->execute()
->fetchObject();

$category_id = intval(array_search($node->type, yml_export_content_types())) + 1;

global $base_url;
$price = intval($product->sell_price);
if ($price > 0) {

$url = $base_url.'/'.drupal_get_path_alias('node/'.$node->nid);
$description = strip_tags($node->body['und'][0]['value']);
$description = htmlspecialchars($description);
$title = htmlspecialchars($node->title);
$output = variable_get('yml_file','').'
<offer id="'.$node->nid.'" type="artist.title" available="true">
<url>'.$url.'</url>
<price>'.$price.'</price>
<currencyId>RUR</currencyId>
<categoryId>'.$category_id.'</categoryId>
'.yml_export_yml_pictures($node).'
<delivery>true</delivery>
<title>'.$title.'</title>
<description>'.$description.'</description>
</offer>

';
variable_set('yml_file',$output);

$context['results']['file_text'] = $output;
// Эта информация будет доступна в mymodule_batch_finished
$context['results'][] = $node->title;
// Сообщение выводимое под прогресс баром после окончания текущей операции
$context['message'] = 'Обработка товара <em>' . $node->title . '</em>';

};
}


function yml_export_yml_generate_form_finished($success, $results, $operations) {
if ($success) {
$output = variable_get('yml_file','').'

</offers>
</shop>
</yml_catalog>
';
variable_set('yml_file',$output);
drupal_set_message('Генерация YML завершена. Экспортировано товаров: ' . count($results));

$yml = variable_get('yml_file','');
file_put_contents(drupal_get_path('module', 'yml_export').'/products.yml', $yml, LOCK_EX);
}
else {
drupal_set_message('Завершено с ошибками.', 'error');
};
variable_set('yml_file','');
}
M2K2
На сайте с 06.12.2010
Offline
54
#1192

Ребят, подскажите кто знает:

Как сделать чтоб стиль текста описания термина таксономии был бы таким же как стиль текста в нодах?

Копирайт по низким ценам (http://www.textsale.ru/team195847.html), Эффективный анализ и учет ключевиков (/ru/forum/712407).
G
На сайте с 22.09.2007
Offline
161
#1193
M2K2:
Ребят, подскажите кто знает:
Как сделать чтоб стиль текста описания термина таксономии был бы таким же как стиль текста в нодах?

правим CSS:

1. самому добавить правила для текста описания

2. скопировать правила текста в нодах и добавить их для описания (вручную или использовать "скомпилированный стиль" в Firefox/Chrome или использовать SnappySnippet в Chrome и т.д.)

M2K2
На сайте с 06.12.2010
Offline
54
#1194
gruz_:
правим CSS:
1. самому добавить правила для текста описания
2. скопировать правила текста в нодах и добавить их для описания (вручную или использовать "скомпилированный стиль" в Firefox/Chrome или использовать SnappySnippet в Chrome и т.д.)

понятно, значит надо лезть в CSS. Шаблон кстати сделан на Артисер 4

---------- Добавлено 30.06.2014 в 17:47 ----------

ПОдскажите еще может кто знает каким образом можно ипортировать CSV файл со всей структурой в словарь таксономии? Содержимое файла следующее

город1;регион1;округ1

город2;регион2;округ1

город4;регион3;округ2

город5;регион4;округ3 и т.д.

тоесть в CSV файле список городов России с регионами и округами, как можно это все со всей структурой перенести в термин таксономии?

Alangasar
На сайте с 06.11.2008
Offline
98
#1195

Воспользоваться модулем https://www.drupal.org/project/feeds (один раз пробовал, не осилил, но народ хвалит), или написать свой парсер

Garin33
На сайте с 31.08.2009
Offline
169
#1196
Потому что Drupal - это круто.
M2K2
На сайте с 06.12.2010
Offline
54
#1197
Alangasar:
Воспользоваться модулем https://www.drupal.org/project/feeds (один раз пробовал, не осилил, но народ хвалит), или написать свой парсер

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

---------- Добавлено 01.07.2014 в 18:17 ----------

Спасибо! Попробую эти модули!

J
На сайте с 13.08.2008
Offline
54
#1198

Сюжет такой:

Захотелось мне в собственной субтеме Омеги передвинуть "крошки" из zone--content.tpl.php в region--content.tpl.php.

Сделал в /templates

zone--content.tpl.php

<?php if ($wrapper): ?><div<?php print $attributes; ?>><?php endif; ?>  
<div<?php print $content_attributes; ?>>
<?php print $content; ?>
</div>
<?php if ($wrapper): ?></div><?php endif; ?>

и region--content.tpl.php.

<div<?php print $attributes; ?>>
<div<?php print $content_attributes; ?>>
<?php if ($breadcrumb): ?>
<div id="breadcrumb" class="block"><?php print $breadcrumb; ?></div>
<?php endif; ?>
<a id="main-content"></a>
<?php print render($title_prefix); ?>
<?php if ($title): ?>
<?php if ($title_hidden): ?><div class="element-invisible"><?php endif; ?>
<h1 class="title" id="page-title"><?php print $title; ?></h1>
<?php if ($title_hidden): ?></div><?php endif; ?>
<?php endif; ?>
<?php print render($title_suffix); ?>
<?php if ($tabs && !empty($tabs['#primary'])): ?><div class="tabs clearfix"><?php print render($tabs); ?></div><?php endif; ?>
<?php if ($action_links): ?><ul class="action-links"><?php print render($action_links); ?></ul><?php endif; ?>
<?php print $content; ?>
<?php if ($feed_icons): ?><div class="feed-icon clearfix"><?php print $feed_icons; ?></div><?php endif; ?>
</div>
</div>

Вуаля, все работает!

Но тут захотелось мне по рецепту http://habrahabr.ru/post/172585/ интегрировать Омегу с Бутстрапом, не забывая про предыдущие достижения. 🤪

Точно так же заливаю в /templates новой субтемы omega_example_botstrap_theme эти два zone--content.tpl.php в region--content.tpl.php

- в результате крошки не выводит, и показывает предупреждение.

Notice: Undefined variable: breadcrumb in include() (line 3 of /home/u8805/domains/u8805.hank.vps-private.net/sites/all/themes/omega_example_botstrap_theme/templates/region--content.tpl.php).

Как решить эту проблему?

J
На сайте с 13.08.2008
Offline
54
#1199

Решение http://www.drupal.ru/node/102876 -

надо добавить код в template.php и preprocess/preprocess-region.inc

M2K2
На сайте с 06.12.2010
Offline
54
#1200

Здравствуйте!

Вопрос про сортировку измененных нод:

Сделал в меню ссылку которая ведет на термин таксономии к которому принадлежат ноды.

Подскажите пожалуйста как можно сделать чтоб Drupal 7 не перекидывал тизеры нод в самый верх списка после изменения/редактирования, чтоб они сортировались только по дате создания а не изменения. Можно ли это сделать средствами Друпала без Views?

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий