чекбокс работает наоборот, т.е. изначально отключает просмотр текста поста во всех постах сайта. Если в новых постах пользователь будет включать просмотр, то в ранее опубликованных (более 1600 постов!) просмотр надо включать вручную
Если чекбокс для отключения поля, то код такой:
<?php if($field['name'] == 'content' && !empty($item['only_users']) && !cmsUser
::getInstance()->is_logged) { continue; } ?>
Если для включения, то код такой:
<?php if($field['name'] == 'content' && empty($item['only_users']) && !cmsUser
::getInstance()->is_logged) { continue; } ?>
Отметить чекбоксы во всех записях сразу можно через phpMyAdmin. Во вкладке SQL выполните запрос:
UPDATE `cms_con_ctype` SET `field`= 1
Где ctype — имя типа контента, field — имя поля.
если применить в текущем варианте, посты сайта с отключенным чекбоксом недоступны для просмотра всем — и зарегистрированным, и гостям, и админу
Да, ошибочка вышла)) Скрыли от всех, получается. В этом сообщении чуть выше исправленные варианты.
нет предупреждения типа «Этот пост доступен для просмотра только зарегистрированным на сайте!»
— комментарии к скрытому посту остаются доступными для просмотра. Это неприемлемо, так же как и картинки скрытого поста, которые тоже остаются видимыми. В итоге данное решение применить, увы, не могу.
Уточнение: видна только «картинка для привлечения внимания». Контент поста не виден полностью.
Вообще-то да, так просто не выкрутитесь одним чекбоксом.
Скрыть комментарии можно в другом файле — templates/шаблон/controllers/content/item_view.tpl.php. В самом низу:
<?php if (!empty($item['comments_widget'])){ ?> <?php echo $item['comments_widget']; ?>
<?php } ?>
Заменить на
<?php $no_comments = empty($item['field']) && !cmsUser
::getInstance()->is_logged; if (!empty($item['comments_widget']) && !$no_comments){ ?> <?php echo $item['comments_widget']; ?>
<?php } ?>
Где field — имя чекбокса. Можно спрятать не только поле с подробным описанием, а любые другие. Продублируйте строки, в которых скрываем поле, но вместо content вставьте другие имена полей.
А вот саму строку, скрывающую поле content, удалите. Сейчас сделаем по-другому.
Найдите в default_item.tpl.php строку
<div class="value"><?php echo $field['html']; ?></div>
И замените на это:
<?php if($field['name'] == 'content' && empty($item['only_users']) && !cmsUser
::getInstance()->is_logged) { ?> <div class="value"><?php html(string_short($item['content'], 150, '<p style="font-weight:bold;">Полный текст доступен только зарегистрированным пользователям. <a href="/auth/login" class="ajax-modal">Войдите</a> или <a href="/auth/register" target="_balnk">зарегистрируйтесь</a>, если хотите почитать еще.</p>', 's')); ?>
<?php } else { ?></div>
<div class="value"><?php echo $field['html']; ?></div>
<?php } ?>
Где, 150 — количество символов для обрезки, s — обрезка по последнему предложению. Можно по последнему слову — тогда напишите w