Перейти к содержанию
Официальный форум поддержки Simpla

Создание нового шаблона


Перейти к решению Решено yr4ik,

Рекомендуемые сообщения

Возникла необходимость внести кардинальные изменения в шаблон магазина. 

 

Вопрос: можно ли как-нибудь сделать новый шаблон и изменять его, чтобы он был виден только при авторизации в админ.панели? 

 

Я пробовал на поддомен new.site.ru скопировать сайт, но в итоге там вместо главной 404 ошибка выдается.

 

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

Ссылка на сообщение
Поделиться на другие сайты

значит копию не правильно сделали. Почему 404 бьет, нужно разбираться.

Надо ставить также на поддомен как и копирование сайта на новый домен получается? Файлы копирнул, база та же. Конфиг тот же. что еще сделать нужно?

 

В таком варианте куча минусов

Ссылка на сообщение
Поделиться на другие сайты

В таком варианте куча минусов

 

Согласен. Мильком полистал тему, может наверное что то упустил, но там вроде бы ничего подобного не было. 

 

В api/settings.php добавляем метод:

public function set_var($name, $value)
{
	$this->vars[$name] = $value;
}

Он нам позволит изменить нашу переменную theme без внесения ее в БД.

 

Далее просто в api/Design.php делаем подмену темы. Единственная сложность в том что нам нужно отсечь изменение этой переменной на страницах админки. Эта сложность выплывает из за того что симпла не имеет единой точки входа. 

Вообще можно врезаться и в view/view.php. Но не все программисты, в аякс модулях, при работе с шаблоном создают экземпляр View. Зачастую это просто api/Simpla.php. 

 
Поэтому если у вас корректно работает переменная $_SERVER['PHP_SELF'] то можно попробовать просто так 
 
api/design.php перед строкой:
$theme = $this->settings->theme;

добавляем:

// Если администратор и находимся на витрине
if(!empty($_SESSION['admin']) && substr($_SERVER['PHP_SELF'], 1, 6) !== 'simpla')
	$this->settings->set_var('theme', 'название темы для админа');

и все.

 

 

если же $_SERVER['PHP_SELF'] работает не корректно то в view/View.php после 

self::$view_instance = $this;

Добавляем

$this->settings->set_var('theme', 'название темы');

но тут, как я писал выше, могут быть проблемы с ajax-модулями витрины.

 

можно еще повозится с контроллером ThemeAdmin (сделав там прямое получение текущей темы), но думаю как то не комильфо. 

 

Не забудьте заменить 'название темы' на нужное. Можете создать в настройках какой то параметр, типа тема для админа и заменить на переменную (или же механизмы кук и сессий)

 

Изменено пользователем yr4ik
Ссылка на сообщение
Поделиться на другие сайты

В таком варианте куча минусов

 

В той теме как минимум ДВА варианта. В самом первом - действительно много минусов. А тот, который в конце темы - почти совсем хороший...

 

Способ yr4ik-а - обременен недостатками "если же $_SERVER['PHP_SELF'] работает не корректно", "могут быть проблемы с ajax-модулями витрины" и потому изначально неудачен. В то время как проблемы с ajax-модулями легко преодолеть, всего лишь записывая название подмененной темы в сессию или куки...

Ссылка на сообщение
Поделиться на другие сайты

В той теме как минимум ДВА варианта. В самом первом - действительно много минусов. А тот, который в конце темы - почти совсем хороший...

 

Способ yr4ik-а - обременен недостатками "если же $_SERVER['PHP_SELF'] работает не корректно", "могут быть проблемы с ajax-модулями витрины" и потому изначально неудачен. В то время как проблемы с ajax-модулями легко преодолеть, всего лишь записывая название подмененной темы в сессию или куки...

 

почти совсем хороший - это какой? Можете показать? 

 

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

Ссылка на сообщение
Поделиться на другие сайты

почти совсем хороший - это какой? Можете показать?

 

Почти совсем хорошим я назвал этот, который дал mart:

http://forum.simplacms.ru/topic/2368-смена-шаблона-пользователем-для-магазинов-шаб/?p=55490

 

Вопрос этот кажется простым и легким. А на самом деле, как ни странно, все сложнее.

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

Ссылка на сообщение
Поделиться на другие сайты

Почти совсем хорошим я назвал этот, который дал mart:

http://forum.simplacms.ru/topic/2368-смена-шаблона-пользователем-для-магазинов-шаб/?p=55490

 

Вопрос этот кажется простым и легким. А на самом деле, как ни странно, все сложнее.

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

 

ну я бы его не назвал таким. Имеет нуу очень большую не доработку...

 

В частности этот момент: 

 

$settings = $this->settings;
$settings->theme = $this->get_theme();
$this->design->assign('settings', $settings);

 

 

и он так же не учтет работу админки...

Изменено пользователем yr4ik
Ссылка на сообщение
Поделиться на другие сайты

 

ну я бы его не назвал таким. Имеет нуу очень большую не доработку...

 

В частности этот момент: 

 

 

и он так же не учтет работу админки...

 

Почему решили, что не учтет? Простым созерцанием кода?

У меня способ  Марта работает, одновременно прекрасно показывает и разные шаблоны на витрине и админку...

Ссылка на сообщение
Поделиться на другие сайты

Почему решили, что не учтет? Простым созерцанием кода?

У меня способ  Марта работает, одновременно прекрасно показывает и разные шаблоны на витрине и админку...

 

ну я не вижу ничего подобного то бы там решалось. Не вариант 1 не вариант 2.

Ничего там не сообщалось о доработке api settings и о settingsAdmin. Поэтому я и выложил свой вариант

Изменено пользователем yr4ik
Ссылка на сообщение
Поделиться на другие сайты

Ну вы как всегда, господа. Ищете универсальное решение на годы. Человек хочет временно ставить другую тему, пока разрабатывает её.

 

В файле api/Design.php после:

// Берем тему из настроек
$theme = $this->settings->theme;

 

добавляем:

if($_SESSION['admin'])
    $theme = 'new';

 

Всё. Делаем копию темы в админке, называем её new.

Ссылка на сообщение
Поделиться на другие сайты

ну я не вижу ничего подобного то бы там решалось. Не вариант 1 не вариант 2.

Ничего там не сообщалось о доработке api settings и о settingsAdmin. Поэтому я и выложил свой вариант

 

Не понял ничего.

 

Вы способ Марта пробовали? 

Способ описан в статье:

https://simplashop.com/article/simpla-2-pereklyuchatel-polzovatelskogo-shablona

 

У меня все легко устанавливается, появляется переключалка шаблонов на витрине. Прекрасно работает и  переключает. При любом выборе шаблона на витрине стандартно работает админка как обычно.

 

Откуда Вы сделали вывод, что при способе Марта не работает админка?

Ссылка на сообщение
Поделиться на другие сайты

Ну вы как всегда, господа. Ищете универсальное решение на годы. Человек хочет временно ставить другую тему, пока разрабатывает её.

 

В файле api/Design.php после:

// Берем тему из настроек
$theme = $this->settings->theme;

 

добавляем:

if($_SESSION['admin'])
    $theme = 'new';

 

Всё. Делаем копию темы в админке, называем её new.

 

Вы повторяете в упрощенном виде ошибку, который мастер "с большими скилами" уже демонстрировал в указанной в #3 теме. На осознание простенькой ошибки у него в той теме ушел почти год:

http://forum.simplacms.ru/topic/2368-смена-шаблона-пользователем-для-магазинов-шаб/?p=54250

 

Теперь Вы продолжаете его дело. Должно быть, Ваши скилы еще больше...

Ссылка на сообщение
Поделиться на другие сайты

Вы повторяете в упрощенном виде ошибку, который мастер "с большими скилами" уже демонстрировал в указанной в #3 теме. На осознание простенькой ошибки у него в той теме ушел почти год:

http://forum.simplacms.ru/topic/2368-смена-шаблона-пользователем-для-магазинов-шаб/?p=54250

 

Теперь Вы продолжаете его дело. Должно быть, Ваши скилы еще больше...

 

Не вводите никого в заблуждение, называя ошибкой то, что ошибкой не является. Необходимость прописывать верные (шок!) адреса ко всяким стилям и скриптам — просто следствие, а не ошибка. Которое с лихвой компенсируется легкостью доработки. Можете сколько угодно важные щеки надувать, рассуждая о идеальном решении.

 

Ну напишет человек в шаблоне ссылку так:

<link rel="stylesheet" href="design/new/css/style.css">

 

С учетом поставленной задачи это в сто раз проще и приятнее, чем читать ваши комментарии. Да гирю пудовую приятнее поднимать, чем ваши комментарии читать.

Ссылка на сообщение
Поделиться на другие сайты

Вы повторяете в упрощенном виде ошибку, который мастер "с большими скилами" уже демонстрировал в указанной в #3 теме. На осознание простенькой ошибки у него в той теме ушел почти год:

http://forum.simplacms.ru/topic/2368-смена-шаблона-пользователем-для-магазинов-шаб/?p=54250

 

Теперь Вы продолжаете его дело. Должно быть, Ваши скилы еще больше...

 

Если сделать так:

if($_SESSION['admin'])
    $theme = 'new';
else
    $theme = 'old';

$this->settings->theme = $theme;

то вы получите рабочий {$settings->theme} в шаблоне, но постоянно будет перезаписываться значение в базе. Лично меня это раздражает. Я бы лучше указал нормальный адрес к шаблону, без переменной.

Изменено пользователем bananovsv
Ссылка на сообщение
Поделиться на другие сайты

Не вводите никого в заблуждение, называя ошибкой то, что ошибкой не является. Необходимость прописывать верные (шок!) адреса ко всяким стилям и скриптам — просто следствие, а не ошибка. Которое с лихвой компенсируется легкостью доработки. Можете сколько угодно важные щеки надувать, рассуждая о идеальном решении.

 

Ну напишет человек в шаблоне ссылку так:

<link rel="stylesheet" href="design/new/css/style.css">

 

С учетом поставленной задачи это в сто раз проще и приятнее, чем читать ваши комментарии. Да гирю пудовую приятнее поднимать, чем ваши комментарии читать.

 

Вы просто гигант мысли. Вот автор Simpla не знал такой хорошей идеи. Он, лапоть отсталый, зачем-то в шаблонах много раз писал сложности типа

href="design/{$settings->theme|escape}/css/style.css"

вместо простенького и понятного

href="design/default/css/style.css".

 

И заметьте, ни один программист с форума до такой простой идеи не дошел. Но теперь они, конечно, осознают Ваше чудесное открытие и перейдут на Ваш стиль. Мелкие недостатки в Вашем методе, конечно, есть - например, в админке копирование шаблонов работать не будет - но сама идея колоссальная. Если б еще в шаблоне заменить всякие глупости типа {$product->image->filename|resize:800:600:w}  на конкретный текст, было б вообще отлично. И убрать всякие {foreach} {if} {else} - чтоб было ближе к чистому HTML. Так что можете развивать свою идею дальше...

Ссылка на сообщение
Поделиться на другие сайты

Не понял ничего.

 

Вы способ Марта пробовали? 

Способ описан в статье:

https://simplashop.com/article/simpla-2-pereklyuchatel-polzovatelskogo-shablona

 

У меня все легко устанавливается, появляется переключалка шаблонов на витрине. Прекрасно работает и  переключает. При любом выборе шаблона на витрине стандартно работает админка как обычно.

 

Откуда Вы сделали вывод, что при способе Марта не работает админка?

 

Корс, опять читаем не вдумываясь в суть? Я не писал что не работает админка! Я писал что он не учтет работу админки... 

 

 

посмотрим на примере ТС. Ему нужна тема именно для админа. Возьмем то решение с статьи (доработаем на условие или какой то параметр нужного админа, пусть даже сессия админа). Далее при заходе на сайт что мы получаем в итоге с этого кода:

 

$settings = $this->settings;
$settings->theme = $this->get_theme();
$this->design->assign('settings', $settings);

 

 

1) $settings = $this->settings; в переменную $settings мы ложим ОБЪЕКТ класса settings. Это не массив! Это объект!

2) $this->get_theme(); - возвращает нужную для админа тему исходя из условий

3) $settings->theme = $this->get_theme(); и что же мы тут видим? Мы через переменную $settings вызываем магический метод сет класса settings, который через БД запишет название темы админа в качестве основной. 

 

и тогда объясните что увидит новоприбывший посетитель сайта? То ли это будет? 

конкретно на примере статьи - это всего лишь новым клиентам в качестве основной темы ставится последняя тема любого другого посетителя... 

 

По моему это вроде все как не слабый баг...

 

 

Что касается определения админки. Если не делать отсечение этого функционала - то тут конечно все пустячное. Но все же. При заходе в дизайн - нам в качестве активной темы отображается не дефолтная, а ту что мы выбрали для админа или последний раз (при пересохранениях - может дать критические неудобства).  + стили в tinymce немного не те будут цепляться (но тут уже кто как посмотрит).

Ссылка на сообщение
Поделиться на другие сайты

По моему это вроде все как не слабый баг...

 

Спасибо за разъяснения. Ваша правда - решение Марта тоже не годится...

Ссылка на сообщение
Поделиться на другие сайты

Вы просто гигант мысли. Вот автор Simpla не знал такой хорошей идеи. Он, лапоть отсталый, зачем-то в шаблонах много раз писал сложности типа

href="design/{$settings->theme|escape}/css/style.css"

вместо простенького и понятного

href="design/default/css/style.css".

 

И заметьте, ни один программист с форума до такой простой идеи не дошел. Но теперь они, конечно, осознают Ваше чудесное открытие и перейдут на Ваш стиль. Мелкие недостатки в Вашем методе, конечно, есть - например, в админке копирование шаблонов работать не будет - но сама идея колоссальная. Если б еще в шаблоне заменить всякие глупости типа {$product->image->filename|resize:800:600:w}  на конкретный текст, было б вообще отлично. И убрать всякие {foreach} {if} {else} - чтоб было ближе к чистому HTML. Так что можете развивать свою идею дальше...

 

Да, и отец русской демократии. Спасибо.

 

Вы очень избирательно комментируете.

Ссылка на сообщение
Поделиться на другие сайты

Спасибо за разъяснения. Ваша правда - решение Марта тоже не годится...

 

ну вот. Поэтому я думаю практичней решать через PHP_SELF. Он не так часто будет неверен. Или же я чет сразу не придумал - можно его заменить на REQUEST_URI. Принцип будет тот же и все будет работать 

Изменено пользователем yr4ik
Ссылка на сообщение
Поделиться на другие сайты

Да, и отец русской демократии. Спасибо.

 

Вы очень избирательно комментируете.

Так что, можно использовать ваш способ?) Сообщество одобряе?)

Ссылка на сообщение
Поделиться на другие сайты

Так что, можно использовать ваш способ?) Сообщество одобряе?)

 

я ж вам вроде бы расписал инструкцию что нужно сделать. Что не так? 

Ссылка на сообщение
Поделиться на другие сайты

Так что, можно использовать ваш способ?) Сообщество одобряе?)

 

Рекомендую вам прочитать все ответы. В теме куча решений на любой вкус — от дилетантских до заморочных.

Я бы сделал так (это по-дилетантски):

if($_SESSION['admin'])
    $theme = 'new';
else
    $theme = 'old';

$this->settings->theme = $theme;

Но правильнее однозначно решение, которое предлагает yr4ik.

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...