Chudo Опубликовано 18 июля, 2018 Жалоба Поделиться Опубликовано 18 июля, 2018 (изменено) Наверняка у пользователей бывали случаи когда, например, нужно поменять почту в подвале сайта. Сам не разбирается как это сделать через код, а до программиста вечно не дозвонишься и не допишешься. Или у разработчиков бывали моменты, когда необходимо создать динамическое поле для вывода данных во front. Например номер телефона. Это нужно было лезть в backand и править как минимум 2 файла. Сам ни раз с этим сталкивался. Поэтому решил написать следующее дополнение в виде создания произвольных переменных, для их последующего вывода в шаблон, и их редактирование из админки. Скрины во вложении И так, к установке: 1. Добавим через phpmyadmin в MySQL базу новый SQL запрос CREATE TABLE IF NOT EXISTS `s_newmyvariables` ( `newmyvariables_id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL DEFAULT '', `label` text NOT NULL, PRIMARY KEY (`newmyvariables_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=193 ; INSERT INTO `s_newmyvariables` (`newmyvariables_id`, `name`, `label`) VALUES (191, 'myvar_phones', 'Телефон'), (180, 'myvar_email', 'Почта'); 2. Зальём файл Newmyvariables.php в папку api/ (он во вложении и в архиве) 3. Открываем файл api/Simpla.php после строки 'settings' => 'Settings', пишем 'newmyvariables'=> 'Newmyvariables', 4. Далее открываем simpla/SettingsAdmin.php после строки $this->design->assign('managers', $managers); пишем $this->design->assign('newmyvariables', $this->newmyvariables); $this->design->assign('myvar', $this->newmyvariables->get_newmyvariables()); 5. В этом же файле (чуть ниже) после строки if($this->request->method('POST')) { пишем if (!empty($_POST['new_name']) && !empty($_POST['new_name_label'])) { $names[0] = 'myvar_'.$this - > request - > post('new_name'); $names[1] = $this - > request - > post('new_name_label'); $this - > newmyvariables - > new_name = $names; } $this - > design - > assign('myvar', $this - > newmyvariables - > get_newmyvariables()); foreach($_POST as $key => $value) { if (strpos($key, 'myvar') === 0) { $this - > settings - > $key = $value; } } 6. И последний файл simpla/design/html/settings.tpl находим и заменяем (почти в самом конце) <input class="button_green button_save" type="submit" name="save" value="Сохранить" /> заменяем на <!-- Свои переменные --> <div class="block layer" id="my-per"> <h2>Новые переменные</h2> <ul> {foreach from=$myvar key=k item=v} <li style="width: 900px;"> <label class=property>{$v}:</label> <input name="{$k}" class="simpla_inp" type="text" value="{$settings->$k|escape}" /> <label style="margin-left: 25px;">{literal}{$settings->{/literal}{$k}{literal}|escape}{/literal}</label> </li> {/foreach} </ul> </div> <div class="block"> <h2>Добавление переменной</h2> <ul> <li><label class=property>Описание переменной</label><input name="new_name_label" class="simpla_inp" type="text" minlength="3" maxlength="20" placeholder="Описание"/></li> <li><label class=property>Имя переменной</label><input name="new_name" class="simpla_inp inp2" minlength="6" maxlength="20" placeholder="Уникальное название" type="text" /></li> </ul> </div> <input class="button_green button_save" type="submit" id="submit" name="save" value="Сохранить" /> <div class="block"> <h2 id="warning">Переменная с таким именем уже существует!</h2> </div> <!-- Свои переменные (The End)--> 7. В самом конце файла после (действительно в самом конце) {literal} <script> $(function() { $('#change_password_form').hide(); $('#change_password').click(function() { $('#change_password_form').show(); }); }); </script> {/literal} пишем {literal} <script> $(function() { $('#warning').hide(); //var input = $('#new-var>input[name="new_name"]'); $('input[name="new_name"]').on('keyup', function() { $('#my-per').find("input").each(function() { if ($(this).attr('name') == 'myvar_' + $('input[name="new_name"]').val()) { $('#warning').show(); $("#submit").attr("disabled", "disabled"); // Запрещаем отправку формы return false; } else { $('#warning').hide(); $("#submit").removeAttr("disabled"); // Запрещаем отправку формы } }); }) }) </script> {/literal} Если всё делать по инструкции, то встанет без ошибки «500» P.S. На хорошую оценку не претендую (написал как смог) и оно вполне рабочее. Что предусмотрел:1. При добавлении одинаковых полей, происходит предупреждение о том, что такое поле существует и не добавляет его.2. При добавлении новой переменной без «описания», сохранение происходит, но не записывает поле в базу. Newmyvariables.php.zip Изменено 18 июля, 2018 пользователем Chudo Цитата Ссылка на сообщение Поделиться на другие сайты
Chudo Опубликовано 18 июля, 2018 Автор Жалоба Поделиться Опубликовано 18 июля, 2018 Уважаемый модератор!Если не сложно, то перенесите данную тему в раздел «Готовые решения» Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 19 июля, 2018 Жалоба Поделиться Опубликовано 19 июля, 2018 Товарищ Огурцов в старом фильме говорил:- Так, ну что ж, товарищи, коллектив большой, народ квалифицированный, работа проделана большая, у меня лично сомнений нет, это дело так не пойдёт... Это не решение для CMS, одной из основных черт которой является простота. Это монстр. То, что можно и нужно было бы делать работой в двух файлах - tpl и php - добавлением двух-трех несложных вставочек, автор раздул до невероятных масштабов - тут и файл новый, и таблица новая... Предлагаемое решение - пример того, как можно безобразно усложнить простую задачу... Цитата Ссылка на сообщение Поделиться на другие сайты
Chudo Опубликовано 19 июля, 2018 Автор Жалоба Поделиться Опубликовано 19 июля, 2018 Товарищ Огурцов в старом фильме говорил:- Так, ну что ж, товарищи, коллектив большой, народ квалифицированный, работа проделана большая, у меня лично сомнений нет, это дело так не пойдёт... Это не решение для CMS, одной из основных черт которой является простота. Это монстр. То, что можно и нужно было бы делать работой в двух файлах - tpl и php - добавлением двух-трех несложных вставочек, автор раздул до невероятных масштабов - тут и файл новый, и таблица новая... Предлагаемое решение - пример того, как можно безобразно усложнить простую задачу... Уважаемый, Phukortsin.Я писал данное решени не для Вас конкретно, поэтому критика в плане "Нужно или не нужно" здесь не уместна. Давайте разберём по существу... Это решение облегчит управление сайтом его владельцам, которые не понимают ничего в работе двух файлах - tpl и php.Данное решение может установить программист, для того, что бы его меньше дёргали по разным пустякам. А впрочем, не нравится решение, делайте ручками. Цитата Ссылка на сообщение Поделиться на другие сайты
luxury Опубликовано 19 июля, 2018 Жалоба Поделиться Опубликовано 19 июля, 2018 (изменено) Доработка полезная но можно значительно проще сделать переменную в самом шаблоне. К примеру объявить в index.tpl {$phone_number = '1234567890'} и выводить {$phone_number} в нужных местах шаблона. Изменено 19 июля, 2018 пользователем luxury Цитата Ссылка на сообщение Поделиться на другие сайты
Chudo Опубликовано 19 июля, 2018 Автор Жалоба Поделиться Опубликовано 19 июля, 2018 Доработка полезная но можно значительно проще сделать переменную в самом шаблоне. К примеру объявить в index.tpl {$phone_number = '1234567890'} и выводить {$phone_number} в нужных местах шаблона. Благодарю, Luxury. Вариантов, которые были проще в реализации - достаточно много. Твой не исключение =) У меня была масса причин сделать именно так) Думаю ещё доработать, и сделать удаление переменных, так же, по-клику из админ панели. Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 19 июля, 2018 Жалоба Поделиться Опубликовано 19 июля, 2018 Давайте разберём по существу...Отличная идея. 1. Я писал данное решени не для Вас конкретно, поэтому критика в плане "Нужно или не нужно" здесь не уместна.2. Это решение облегчит управление сайтом его владельцам3. Данное решение может установить программист, для того, что бы его меньше дёргали по разным пустякам.4. А впрочем, не нравится решение, делайте ручками.1. Не понял, к чему это сказано. Критики в плане "Нужно или не нужно" с моей стороны не было...2. Согласен.3. Не понял, к чему это сказано. Данное решение может установить как программист, так и любой другой человек...4. Тоже не понятно, к чему это сказано. Если Вы прочтете повнимательнее мое замечание, то должны бы понять, что моя главная мысль - только в том, что предложенное решение экстремально сложно и потому крайне нерационально. Надо бы подобные решения писать намного проще и легче... Цитата Ссылка на сообщение Поделиться на другие сайты
Chudo Опубликовано 19 июля, 2018 Автор Жалоба Поделиться Опубликовано 19 июля, 2018 Отличная идея. 1. Не понял, к чему это сказано. Критики в плане "Нужно или не нужно" с моей стороны не было...2. Согласен.3. Не понял, к чему это сказано. Данное решение может установить как программист, так и любой другой человек...4. Тоже не понятно, к чему это сказано. Если Вы прочтете повнимательнее мое замечание, то должны бы понять, что моя главная мысль - только в том, что предложенное решение экстремально сложно и потому крайне нерационально. Надо бы подобные решения писать намного проще и легче... Возможно я был несколько резок в своём ответе, и не правильно понял Вашу мысль. Я смотрел много различных доработок в пределах данного форума, и думал так же как Вы. Но, возможно для кого-нибудь, это будет необходимым решением. Как для меня, например. Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.