Подскажите пожалуйста ! Не могу найти как сделать так чтобы на странице каталога можно было бы делать выбор его отображения. Во views есть вывод: grid и table вот надо кнопку типа отобразить grid или отобразить table !
Как легче реализовать ?
Может можно скопировать шаблон вывода по умолчанию в рабочий каталог и там поставить условие при котором бы подгружался иной шаблон ?! Вопрос как подгружать программно шаблоны в drupal7 !
Но это просто мысли !
Комментарии
Сделайте две отдельые страницы и добавьте их в меню как дочерние пункты вашего каталога
js конечно
Можно ещё попробовать Views Modes
Хочу попробывать сделать так !
Скопировал в папку с шаблоном файл views-view-table--uc-catalog--catalog.tpl.php ну короче переопределил вывод шаблона views.
Код такой вот :
<?php<table <?php if ($classes): ?> class="<?php print $classes; ?>"<?php endif ?><?php print $attributes; ?>>
<?php if (!empty($title) || !empty($caption)): ?>
<caption><?php print $caption . $title; ?></caption>
<?php endif; ?>
<?php if (!empty($header)) : ?>
<thead>
<tr>
<?php foreach ($header as $field => $label): ?>
<th <?php if ($header_classes[$field]): ?> class="<?php print $header_classes[$field]; ?>"<?php endif; ?> scope="col">
<?php print $label; ?>
</th>
<?php endforeach; ?>
</tr>
</thead>
<?php endif; ?>
<tbody>
<?php foreach ($rows as $row_count => $row): ?>
<tr <?php if ($row_classes[$row_count]): ?> class="<?php print implode(' ', $row_classes[$row_count]); ?>"<?php endif; ?>>
<?php foreach ($row as $field => $content): ?>
<td <?php if ($field_classes[$field][$row_count]): ?> class="<?php print $field_classes[$field][$row_count]; ?>"<?php endif; ?><?php print drupal_attributes($field_attributes[$field][$row_count]); ?>>
<?php print $content; ?>
</td>
<?php endforeach; ?>
</tr>
<?php endforeach; ?>
</tbody>
</table>?>
Теперь вот хочу в файл этого же шаблона вставить код шаблона views-view-list.tpl.php
С таким вот кодом:
<?php print $wrapper_prefix; ?>
<?php if (!empty($title)) : ?>
<h3><?php print $title; ?></h3>
<?php endif; ?>
<?php print $list_type_prefix; ?>
<?php foreach ($rows as $id => $row): ?>
<li class="<?php print $classes_array[$id]; ?>"><?php print $row; ?></li>
<?php endforeach; ?>
<?php print $list_type_suffix; ?>
<?php print $wrapper_suffix; ?>
В итоге на странице выводится основное представление ,а вот вывод второго шаблона через код выдаёт такое вот :
Array
Array
Array
Array
как верно встаивть код ещё одного вывода views в этот шаблон ?
Вы же выводите все строку, которая array - вот и получаете ...
сделайте
<?php
<li class="<?php print $classes_array[$id]; ?>"><?php print_r($row, TRUE); ?></li>
?>
увидите в каких ключах что лежит и выведите их потом...
[quote=postgres]
Вы же выводите все строку, которая array - вот и получаете ...
сделайте
<?php
<li class="<?php print $classes_array[$id]; ?>"><?php print_r($row, TRUE); ?></li>
?>
Вообще просто пусто тогда !
Вот ссылка
сори...
<?php echo print_r($row, TRUE); ?>
При наличии второго аргумента TRUE просто возвращается строка...
Извращение какое-то.
<?php print_r($row); ?>
достаточно.
ну сами догадайтесь почему так, целомудренный вы наш.
В смысле догадайтесь? Что почему так?
print_r($var); - вывести переменную в человекочитаемом виде.
print_r($var, TRUE); - вернуть строку, содержащую переменную в человекочитаемом виде.
echo print_r($var, TRUE); - вывести строку, которую вернул print_r, которая содержит переменную в человекочитаемом виде.
Это приблизительно как вместо того, чтобы сделать ксерокопию - отсканировать и сразу распечатать.
Короче оформляя вывод print_r как возвращаемую строку я хотел обратить внимание, намекнуть на то, что
1. Вывести сырой $row можно прямо во view через глобальный php, тогда return print_r($row, TRUE);
2. в шаблоне twig нельзя print_r без параметра return = TRUE (исключительно ради форматирования конечно)
3. Если предположить, что все знают о наличии второго параметра у print_r, ровно как и о наличии второго параметра json_decode, то это избыточный код. Но не извращенный, обращаю на это внимание.
1. Глобальный php доступен только при наличии php-фильтра, который есть зло. А в контексте шаблона вообще непонятно, причём тут пхп-фильтр.
2. В шаблоне твиг вообще нельзя print_r, там dump(). И речь о семёрке.
3. ИМХО, ненужная избыточность есть одна из форм извращений.
глобальный фильтр не зло о добро, чушь собачья про зло.
dump работает только в режиме отладки, тебя за деньги научу как работать print_r.
Твое имхо тут избыточно, в этом топике.
Ты чего хочешь, двойной солянки?
<?php echo print_r($row, TRUE); ?>
Опа ! офигеть первый раз такую конструкцию вижу "echo print_r" хмммм
Хочу сделать js переключение просто вывода !
внимание, из документации...
Помните, что print_r() перемещает указатель массива в конец. Используйте reset() для возврата его в начало.
Если вы хотите сохранить результат, используйте второй параметр return. Когда TRUE, print_r() возвратит информацию, а не будет печатать его.
Вообще причём тут print_r, шаблоны и иже с ними? Сейчас уже не могу найти обсуждений, но есть навскидку несколько вариантов:
1. Выводить одну и ту же разметку, с помощью js переключать класс, который меняет отображение.
2. Третий коммент в этом же топике
3. Ещё вариант, как можно настроить
4. Вообще по хардкору, отдельные урлы под отдельные вьюмоды, выводить вкладками.
Имхо, это лучше всего.
У Андеда обычно хорошо отработанные решения, с минимумом правок, бери и используй.
PS. Есть, кстати, ещё
<?php print var_export($variable, TRUE); ?>
Не знаю чей это сайт, но там много интересного и по этой теме есть простой вариант с js - http://stinto.ru/diy/drupal-view-grid-to-list, автор даже спрайты прилагает)
Это по сути реализация вот этого (только с куками):
https://codepen.io/servor/pen/dWjxdG
Имхо, это уже жесть какая-то.
Там все ноды хранятся в JS-массиве.
рендер на клиенте который мы заслужили
Ой, да ладно. Стильно, модно, mvc-шно.
Содержимое нод можно, кстати, спарсить из разметки при загрузке.
Мой предыдущей пост был скорее шуточным.
Автор. возможно вам поможет модуль https://www.drupal.org/project/views_modes
Если нет то надо 2 кнопочки сделать, по нажатию на которые меняется класс у вывода (на jquery). В зависмости от класса формируем записи вьюхи клетками и строками. Класс можно в куках хранить.
К сожалению код не могу скинуть т.к. клента с подобным сайтом кризис скосил.
Вообще ничего не понимаю !
Сделал файл:
views-view-fields--uc-catalog--catalog.tpl.php
туда внёс такой вот код:
<?php foreach ($fields as $id => $field): ?>
<?php if (!empty($field->separator)): ?>
<?php print $field->separator; ?>
<?php endif; ?>
<?php print $field->wrapper_prefix; ?>
<?php print $field->label_html; ?>
<?php print $field->content; ?>
<?php print $field->wrapper_suffix; ?>
<?php endforeach; ?>
<table <?php if ($classes): ?> class="<?php print $classes; ?>"<?php endif ?><?php print $attributes; ?>>
<?php if (!empty($title) || !empty($caption)): ?>
<caption><?php print $caption . $title; ?></caption>
<?php endif; ?>
<?php if (!empty($header)) : ?>
<thead>
<tr>
<?php foreach ($header as $field => $label): ?>
<th <?php if ($header_classes[$field]): ?> class="<?php print $header_classes[$field]; ?>"<?php endif; ?> scope="col">
<?php print $label; ?>
</th>
<?php endforeach; ?>
</tr>
</thead>
<?php endif; ?>
<tbody>
<?php foreach ($rows as $row_count => $row): ?>
<tr <?php if ($row_classes[$row_count]): ?> class="<?php print implode(' ', $row_classes[$row_count]); ?>"<?php endif; ?>>
<?php foreach ($row as $field => $content): ?>
<td <?php if ($field_classes[$field][$row_count]): ?> class="<?php print $field_classes[$field][$row_count]; ?>"<?php endif; ?><?php print drupal_attributes($field_attributes[$field][$row_count]); ?>>
<?php print $content; ?>
</td>
<?php endforeach; ?>
</tr>
<?php endforeach; ?>
</tbody>
</table>?>
В итоге работает ток вывод в виде списка ! В виде таблицы вообще ничего не выводится на страницу....в чем проблема ?
Как узнать в каком массиве передаются данные на страницу ?
извиняюбсь перепутал шаблоны общего вывода и вывода полей )
Значит возможное решение
1) подключаем jquery библиотеку для работы с куки
template.php темы добавить строчку
drupal_add_library('system', 'jquery.cookie');
2) определяем 2 кнопки переключения классов t-strokami t-kletkoi и область и которой будет меняться класс t-content
переписываем шаблон вьюхи
Тема: Информация - и первая же ссылка даст код и название файла типа views-view--[имя вьюхи].tpl.php
там где
<?php if ($rows): ?>
меняем код на
<div class="switch">
<div class="t-strokami">Строками</div>
<div class="t-kletkoi">Клеткой</div>
</div>
<div class="t-content strokami">
<?php print $rows; ?>
</div>
<?php elseif ($empty): ?>
<div class="view-empty">
<?php print $empty; ?>
</div>
<?php endif; ?>
3) скрипт подключаем его в info файле темы
Drupal.behaviors.slineTheme = {
attach: function(context, settings) {
function setMyCookie() {
myCookieVal = $('.t-content').hasClass('strokami') ? 'isActive' : 'notActive';
$.cookie('myCookieName', myCookieVal, { path: '/' });
}
if ($.cookie('myCookieName') == 'isActive') {
$('.t-content').addClass('strokami');
$('.t-content').removeClass('kletkoi');
} else {
$('.t-content').addClass('kletkoi');
$('.t-content').removeClass('strokami');
}
$(".t-strokami").click(function(){
$(".t-content").toggleClass("kletkoi",false);
$(".t-content").toggleClass("strokami",true);
setMyCookie();
});
$(".t-kletkoi").click(function(){
$(".t-content").toggleClass("kletkoi",true);
$(".t-content").toggleClass("strokami",false);
setMyCookie();
});
}
};
})(jQuery);
4. CSS-им
width: 100%;
}
.t-content.kletkoi .views-row {
width: 33.33%;
}
Както-так