Перейти к содержимому


Фото
- - - - -

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


Best Answer yr4ik , 01.12.2018 - 19:15

мдаа... Расписываю (копируйте внимательно и ничего не пропускайте): 
 

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

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

 

api/design.php перед строкой:

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

 

добавляем:

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

 

и все.

 

Если что, то более подробно описано в посте #5 (там еще чуток комментариев есть).

Перейти к посту


  • Чтобы отвечать, сперва войдите на форум
47 ответов в теме

#1 Consult

Consult
  • Пользователь
  • 256 сообщений
  • Заказчик
  • Версия CMS:2.x
  • Откуда:Санкт-Петербург

Опубликовано 19.11.2018 - 23:43

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

 

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

 

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

 

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



#2 Kami

Kami
  • Пользователь
  • 232 сообщений
  • Откуда:Россия

Опубликовано 20.11.2018 - 00:05

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



#3 phukortsin

phukortsin
  • Пользователь
  • 639 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 20.11.2018 - 09:41

http://forum.simplac...-магазинов-шаб/



#4 Consult

Consult
  • Пользователь
  • 256 сообщений
  • Заказчик
  • Версия CMS:2.x
  • Откуда:Санкт-Петербург

Опубликовано 20.11.2018 - 21:25

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

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



http://forum.simplac...-магазинов-шаб/

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



#5 yr4ik

yr4ik
  • Фрилансер
  • 905 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:Украина Чернигов

Опубликовано 20.11.2018 - 22:53

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

 
Согласен. Мильком полистал тему, может наверное что то упустил, но там вроде бы ничего подобного не было. 
 
В 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, 20.11.2018 - 22:54


#6 phukortsin

phukortsin
  • Пользователь
  • 639 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 21.11.2018 - 10:24

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

 

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

 

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



#7 yr4ik

yr4ik
  • Фрилансер
  • 905 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:Украина Чернигов

Опубликовано 21.11.2018 - 16:11

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

 

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

 

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

 

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



#8 phukortsin

phukortsin
  • Пользователь
  • 639 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 21.11.2018 - 17:56

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

 

Почти совсем хорошим я назвал этот, который дал mart:
http://forum.simplac...ов-шаб/?p=55490

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



#9 yr4ik

yr4ik
  • Фрилансер
  • 905 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:Украина Чернигов

Опубликовано 21.11.2018 - 20:22

Почти совсем хорошим я назвал этот, который дал mart:
http://forum.simplac...ов-шаб/?p=55490

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

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

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

 

 

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


Изменено: yr4ik, 21.11.2018 - 20:23


#10 chocolate_moles

chocolate_moles
  • Фрилансер
  • 462 сообщений
  • Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Санкт-Петербург

Опубликовано 21.11.2018 - 21:31

SA1S4Yh.png



#11 phukortsin

phukortsin
  • Пользователь
  • 639 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 22.11.2018 - 10:00

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

 

 

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

 

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

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



#12 yr4ik

yr4ik
  • Фрилансер
  • 905 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:Украина Чернигов

Опубликовано 22.11.2018 - 11:04

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

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

 

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

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


Изменено: yr4ik, 22.11.2018 - 11:06


#13 bananovsv

bananovsv
  • Пользователь
  • 140 сообщений

Опубликовано 22.11.2018 - 11:08

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

 

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

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

 

добавляем:

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

 

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



#14 phukortsin

phukortsin
  • Пользователь
  • 639 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 22.11.2018 - 12:59

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

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

 

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

 

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

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

https://simplashop.c...lskogo-shablona

 

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

 

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



#15 phukortsin

phukortsin
  • Пользователь
  • 639 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 22.11.2018 - 13:57

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

 

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

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

 

добавляем:

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

 

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

 

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

http://forum.simplac...ов-шаб/?p=54250

 

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



#16 bananovsv

bananovsv
  • Пользователь
  • 140 сообщений

Опубликовано 22.11.2018 - 14:27

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

http://forum.simplac...ов-шаб/?p=54250

 

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

 

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

 

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

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

 

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



#17 bananovsv

bananovsv
  • Пользователь
  • 140 сообщений

Опубликовано 22.11.2018 - 14:52

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

http://forum.simplac...ов-шаб/?p=54250

 

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

 

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

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

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

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


Изменено: bananovsv, 22.11.2018 - 14:58


#18 phukortsin

phukortsin
  • Пользователь
  • 639 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 22.11.2018 - 15:59

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

 

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

<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. Так что можете развивать свою идею дальше...



#19 yr4ik

yr4ik
  • Фрилансер
  • 905 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:Украина Чернигов

Опубликовано 22.11.2018 - 16:10

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

 

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

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

https://simplashop.c...lskogo-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 немного не те будут цепляться (но тут уже кто как посмотрит).



#20 phukortsin

phukortsin
  • Пользователь
  • 639 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 22.11.2018 - 17:16

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

 

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






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых