Как сделать такую сортировку?
Не могу понять, почему не работает сортировка в Search api. Делаю все по образцу настроек в Коммерс кикстарт.
Кто-нибудь сталкивался с проблемой? Как это побороть?
1. Сделал через Search api поиск по образцу "Коммерс кикстарт" - фасетный поиск + поиск из формы через фильтр.
2. Вроде все нормально работает, но у Кикстарта около всех слов, как выбранных в фасетах, так и вбитых в формы поиска, есть возможность, нажав на "крест", убрать слово из активных фильтров. А то, что получилось у меня - эта функция не работает для поисковых слов, вбитых в форму поиска.
Как это выглядит, на первой картинке. Через поисковую форму вбито "рамка". Т.е. поисковое слово забивается прямиком в <li></li>, а в других случаях создается <a></a>. Как это вылечить?
Для примера, как то же выглядит в Кикстарте - на второй картинке. Через форму вбито "кабель".
Как добавить в выдачу "advanced sphinx" картинку? если например поле картинки - product_image?
<?php
// $Id: advanced_sphinx_items_result_main.tpl.php, v 1.0 2011/07/05 19:59:16 gagaga Exp $
/**
* @file advanced_sphinx_items_result_main.tpl.php
* Default theme implementation to item search result.
*
* Available variables:
* - $result: Array with all data:
* - $result['number']: Serial number search results.
* - $result['title']: Linked title to full node.
* - $result['excerpts']: .
* - $result['date']: Date and time of posting.
* - $result['username']: Linked login to node author.
* - $result['tax']: List of taxonomy term.
*/
?>
<li class="result-folded">
<h3 class="title-result"><span class="number-result"><?php print $result['number']; ?>.</span> <?php print $result['title']; ?></h3>
<?php if (isset($result['excerpts'])) { ?>
<div class="content-result">
<?php print $result['excerpts']; ?>
</div>
<?php } ?>
<div class="info-result">
<?php if (isset($result['date'])) { ?>
<span class="date-result"><?php print $result['date']; ?>,</span>
<?php if (isset($result['username'])) { ?>
<span class="autor-result"><?php print $result['username']; ?></span>
<?php if (isset($result['uc_product_image'])) {?>
<span class="tax-result"><?php print t('Tags') .': '.$result['tags']; ?></span>
<?php if (isset($result['tags'])) {?>
</li>---------- Добавлено 13.08.2014 в 05:19 ----------*******************
оба варианта показывают "битую" картинку
<?php$image_settings = array( 'style_name' => 'thumbnail', 'path' => $node->product_image['und'][0]['uri'], 'attributes' => array('class' => 'image'), 'getsize' => FALSE,); print theme('image_style', $image_settings);?><?php$image_settings = array( 'style_name' => 'thumbnail', 'path' => $record->uri, 'alt' => $record->alt, 'title' => $record->title, 'attributes' => array('class' => 'image'), 'getsize' => FALSE, ); print theme('image_style', $image_settings);?>
$image = array(
'path' => $file->uri, // путь до картинки.
'style_name' => 'thumbnail', // - имя стиля.
);
print theme('image_style', $image);
искал варианты, но до конца не довел.
видимо, надо копать в сторону https://www.drupal.org/project/s3fs или https://www.drupal.org/project/amazons3 или https://www.drupal.org/project/aws_amazon или https://www.drupal.org/project/cloud_files
тут другой результат. вот картинка. имхо куда симпатичнее.
а в моей проблеме кажется, все просто - модуль Adaptive Image не хочет в файрфоксе работать.
**************
другой вариант, по рецепту https://www.drupal.org/node/2169157
добавил код:
function bootstrap_lawyer_preprocess_field(&$variables) { if($variables['element']['#field_name'] == 'field_image'){ foreach($variables['items'] as $key => $item){ $variables['items'][ $key ]['#item']['attributes']['class'][] = 'img-responsive'; // http://getbootstrap.com/css/#overview-responsive-images } }}
то же самое - в файрфоксе не работает. -:(((
Подключил модуль Adaptive Image, и сделал вывод текста со стилем css3 в 2 колонки, код:
.node .content { text-align: justify; -moz-column-count: 2; -moz-column-gap: undefinedpx; -webkit-column-count: 2; -webkit-column-gap: undefinedpx; column-count: 2; column-gap: undefinedpx; }
В результате, в Хроме (а также Опере, Яндексе, и Мэйл.ру) выводит как надо (картинка 1),
в Файрфоксе - этот эффект не работает (рис 2).
Что делать?
Решение http://www.drupal.ru/node/102876 -
надо добавить код в template.php и preprocess/preprocess-region.inc
Сюжет такой:
Захотелось мне в собственной субтеме Омеги передвинуть "крошки" из 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).
Как решить эту проблему?
Заказал одному парню модуль экспорта в Яндекс-маркет; модуль получил, и даже валидацию проходит, но есть несколько косяков.
Например, надо в тег <vendor></vendor> поместить название поставщика, и взять его из поля таксономии field_svet (для контента svet - строка 97) и из поля field_radiator (для контента radiator - строка 96).
Подскажите плиз как сделать.
<?phpfunction 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','');}