Ярослав пишет:

Оригинально. чем то на битрикс похоже

Чур! Чур меня! )))

Закусило Александр пишет:

А чем мой способ плох? Зачем целый модуль?

Не всегда странице соответствует какой-то пункт меню, поэтому опираться на $menu_item.id я не могу.
Ну и, к тому же, мне показалось более удобным управлять всем, просто формируя нужную структуру на файловой системе, чем делать то же самое и вдобавок редактировать дополнительный шаблон. Файлы ведь все равно придется класть куда надо.

Если честно, все это мысли задним числом. На момент разработки своего решения про способ, описанный в вашем, я не знал.
Я пока плохо знаю ReadyScript, так что, возможно, выбрал не самый лучший вариант.

Ярослав, Александр, спасибо за советы.

В итоге я написал свой модуль (возможно, изобрел велосипед), который позволяет делать такие страницы, просто создав для неё каталог с нужными файлами.

Например, хочу страницу /custom/contact/.

Для этого создаю каталог $THEME_DIR/custom_pages/contact, в него кладу файлы:

  • content.tpl - будет обработан как шаблон и вставлен в качестве содержимого страницы

  • *.css - все файлы, находящиеся в каталоге, будут подключены на странице после общих стилей темы; если файл подключать не нужно, надо дать ему имя, начинающееся с _ (знак подчеркивания)

  • *.js - любые javascript файлы, аналогично css; будут подключены в футере

Закусило Александр пишет:

Что это за страница? Скорее всего Вам нужно просто проверить идентификатор внутренней сущности.

Например, страница с контактной информацией. Пусть это обычная текстовая страница с адресом вида /text-/что-то/.

Я не совсем понял про идентификатор сущности.

Ярослав пишет:

Самый простой способ - в режиме просмотра html текста это страницы добавить CSS правила.

Это не очень удобно. Там их много, хочется держать их в отдельном файле, а не инлайн. Есть риск их попортить при редактировании, если кто-нибудь включит визульный редактор.
Ну и этот способ точно не сработает для javascript-кода. Редактор его не пропускает, насколько я понял.

Есть страница с текстом нестандартного оформления, которое требует дополнительных CSS-правил, актуальных только для этой страницы (поэтому в общий CSS их вставлять не хочется). Эти правила сложены в отдельный файл.

Подобная ситуация и с javascript: странице нужен специальный код лично для нее.

Как такую страницу сделать?

Я пока вижу единственный вариант: делать под неё специальный модуль, который будет отвечать на соотв. маршрут.

Есть ли какой-то более простой способ? Или действительно без модуля не обойтись?

Вариант с listproducts.my.inc.php работает, спасибо. Пока остановлюсь на нём.

Закусило Александр пишет:

Вам нужно событие getroute в нем нужно создать тот же самый маршрут, что и в модуле каталога

А где это событие перехватывается? Как мне создать такой маршрут и передать ему управление?

Мне, получается, нужно создать для этого отдельный модуль?

Стоит задача разместить в каталогах определенных категорий подарки, разбавив ими список товаров.

Самое простое, что пришло в голову:

1. Сами подарки реализовать в виде отдельной категории.

2. При формировании списка товаров получить набор подарков и замешать их в этот список.

Этот вариант попробовали, и он сработал.

Проблема в том, что код, отвечающий за п.2, нужно вставлять в метод модуля \Catalog\Controller\Front\ListProducts::actionIndex() (файл modules\catalog\controller\front\listproducts.inc.php), который перепишется при первом же обновлении модуля (если я правильно понимаю).

Подозреваю, что нужно каким-то образом создать свой дочерний класс и там этот метод переопределить, но он тако-о-ой длиннющий и непонятный, что подобное потребует бездумного копипаста 95% этой массы кода и потому чревато ошибками.

Как здесь следует поступить?

Спасибо, помогло.

Пытаюсь с помощью этой функции добавить скрипт с другого домена - {addjs file="https://..."}.
Получается /templates/тема/resource/js/https://...

Можно ли как-то указать функции, что не надо к адресу ничего дописывать?

В ответ на любой запрос показывает пустое содержимое страницы, есть только шапка.

Например, https://readyscript.ru/dev-manual/searc … eadyScript

Было б хорошо, если бы работал. А то так иногда легче прямо в коде с помощью IDE искать, чем через дерево навигации слева sad

с той вкладки галочки падают не в базу, а в файл /config.auto.php

А этот файл разве не переписывается при каждом нажатии кнопки Сохранить?

Я так и хотел сделать. Но свойства \Setup::$SM_COMPILE_CHECK не существует neutral
Три других есть, а этого нет.

Хотелось бы через _local_setting.php это провернуть: если понадобится обновить базу с рабочей копии, галочки придется выставлять заново.

Какие настройки отвечают за три из них, вроде бы, понятно:

\Setup::$SM_COMPILE_CHECK = TRUE; // Всегда проверять шаблоны на предмет модификации
\Setup::$DETAILED_EXCEPTION = TRUE; // Подробно отображать информацию об исключениях
\Setup::$CACHE_ENABLED = FALSE; // Выключить кэширование данных

А вот настройкой "Включить кэширование Smarty" как управлять через \Setup?

Хочу отключить кэш, чтобы изменения в шаблонах сразу отражались на странице.


Пробовал следующее (предварительно вручную удалив папку cache):


1. В _local_settings.php установил

\Setup::$CACHE_ENABLED = FALSE;

Не помогло вообще: при первом же обращении папка cache снова создалась и при последующих обращениях не менялась (видно по времени модификации). Не менялось, очевидно, и содержимое страниц, пока не удалишь папку вручную.

Файл _local_settings.php точно читается, т.к. иначе не прошло бы соединение с базой данных.


2. В index.php добавил строчку:

(new \RS\Cache\Manager)->invalidateAll();

Очищается только папка cache/engine. Остальные не меняются.


Что я делаю не так?

Лучше иметь именно в виде явного SQL-запроса, чтобы можно было потом использовать в скриптах.

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

Снять дамп, скопировать его и распаковать можно несложной командной.
А вот вручную каждый раз лазить что-то исправлять, тыкая мышкой - это не комильфо.
Поэтому должен быть скрипт, который накладывается на дамп и проводит все необходимые для локальной копии изменения.

Другими словами, примерно так:

ssh site.ru "mysqldump site_db" | mysql site_local_db # сняли и распаковали дамп
mysql site_local_db < fix.sql # применили изменения 

И можно ничего не исправлять вручную cool


надо просто научиться пользоваться sql-клиентом типа HeidiSQL
Открыть таблицу sites, перейти в Данные - и вот оно всё, бери и меняй.

Кстати, графический SQL-клиент обычно показывает реальный запрос, который он выполнил, чтобы применить изменения. (За Heidi конкретно не скажу, но наверняка и там это есть.)

Разобрался сам, порывшись в коде платформы.

Нужно сделать две вещи:


1. Подсоединиться к базе данных и выполнить там запрос вида

UPDATE префикс_sites
SET redirect_to_https = 0
WHERE id = <ID> ;

Какой у вас префикс, можно узнать, посмотреть на свои таблицы.

ID сайта: если он у вас один, то id = 1. Если сомневаетесь - сделайте SELECT * FROM префикс_sites и там посмотрите.

Цивилизованно эта операция должна делаться через административную панель, где у сайта нужно снять галочку "Перенаправлять на https". Но сайт-то через браузер недоступен, поэтому панель не откроешь.


2. Очистить кэш ReadyScript.

Самый простой способ это сделать - удалить папку cache в корневом каталоге сайта.

Разворачиваю локальную копию сайта (скажем, somesite.local).

Сайт перебрасывает на адрес https://somesite.local, что приводит к ошибке, т.к. нет сертификата (и возиться с ним не хочется, т.к. на локальной копии он совершенно ни к чему).

Можно ли как-то отучить механизм сайта перенаправлять с http на https?