Добавить полю body новый класс, если поле Фото заполнено?

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

Аватар пользователя tlito tlito 12 октября 2016 в 22:11

У меня есть поле Фото со множественным значением - туда загружается много фотографий.
Эти фотографии должны выводиться справа от текста материала.
Я хочу спросить: как можно это правильно темизировать.
То есть материалы могут иметь поле фото заполненным, а в других оно - пустое.
Я хочу, чтобы было как на картинке

свадьба

Но у меня не получается простым CSS сделать так. то есть такой код неправильный:

.field-name-body {width: 70%; float:left;}
.field-name-field-foto {width:29%; float:right;}

этот код неправильный, так как не учитывает, что в некоторых записях нет фотографий, и тогда поле боди будет занимать только 70%, а надо 100%

Поэтому я хочу другое решение: нужно добавить блоку поля body новый класс has-foto, если материал имеет заполненное поле Фото,. тогда css будет выглядеть так:

.field-name-body.has-foto {width: 70%; float:left;}
.field-name-field-foto {width:29%; float:right;}

подскажите, как добавить такой атрибут? как я понимаю, надо использовать в файле template.php функцию template_preprocess_field https://api.drupal.org/api/drupal/modules%21field%21field.module/functio... ???

ВложениеРазмер
Иконка изображения dag-sv.jpg135.57 КБ

Лучший ответ

Аватар пользователя tlito tlito 12 октября 2016 в 22:55

в файле template.php такой хук решил вопрос:

<?php
function THEMENAME_preprocess_field(&$variables$hook) {
    if ( 
$variables['element']['#title'] == 'Body' ) {
        
//dpm($variables);
        
if ( isset($variables['element']['#object'] -> field_foto['und']) ) {
            
//dpm('hello');
            
array_push($variables['classes_array'], 'has-foto');
        }
        
    }
}
?>

CSS такой:

.node-type-portfolio .field-name-body.has-foto {width:70%;float:left;}
.field-name-field-foto {float:right;max-width:29%;}
.field-name-field-foto .field-item {float:right;}

Комментарии

Аватар пользователя Mihail.space Mihail.space 12 октября 2016 в 22:25
1

делать проверку поля на не пустое или нет и выводить поле если не пустое с одним классом, а если пустое, то с другим, что то типа

if(!empty($node->field_example)){
...
}
else{
...
}

или

<?php if(!empty($node->field_example)); ?>
...один вывод разметки
<? php endif; ?>
<?php if(empty($node->field_example)); ?>
...другой вывод разметки
<? php endif; ?>
Аватар пользователя tlito tlito 12 октября 2016 в 22:55

в файле template.php такой хук решил вопрос:

<?php
function THEMENAME_preprocess_field(&$variables$hook) {
    if ( 
$variables['element']['#title'] == 'Body' ) {
        
//dpm($variables);
        
if ( isset($variables['element']['#object'] -> field_foto['und']) ) {
            
//dpm('hello');
            
array_push($variables['classes_array'], 'has-foto');
        }
        
    }
}
?>

CSS такой:

.node-type-portfolio .field-name-body.has-foto {width:70%;float:left;}
.field-name-field-foto {float:right;max-width:29%;}
.field-name-field-foto .field-item {float:right;}