Chudo Опубликовано 16 июля, 2018 Жалоба Поделиться Опубликовано 16 июля, 2018 (изменено) Всем доброго дня, друзья! Задался я тут написанием модуля (не коммерческим). Идея следующая:Создание собственной переменной для её последующего вывода во front. Скорее всего моё решение не рационально, со стороны программирования, но для решения моих задач, вполне подходит. Собственно, это как создать новое поле в настройках и вывести его во front {$settings->company_phone|escape} _________________________________ Помогите пожалуйста привести переменную к желаемому виду. Есть рабочий вывод параметров циклом [работает] {get_myvariables var=myvariable} {if $myvariable} {foreach $myvariable as $m} {if $m->image} {if $m->description} {$m->description} {/if} {/if} {/foreach} {/if} Конкретный параметр выводу по id [работает] {get_myvariables var=myvariable} {if $myvariable} {foreach $myvariable as $m} {if $m->id == 1} {if $m->description} {$m->description} {/if} {/if} {/foreach} {/if} Во View.php написан следующий код: Настроил плагин для смарти $this->design->smarty->registerPlugin("function", "get_myvariables", array($this, 'get_myvariables_plugin')); и сам плагин public function get_myvariables_plugin($params, &$smarty) { if(!empty($params['var'])) $smarty->assign($params['var'], $this->myvariables->get_myvariables($params)); } Но не могу понять, как мне привести значение переменной, как например у настроек {$settings->company_phone|escape} что бы у меня работал следующий вывод {$myvariables->name_myvariable} где name_myvariable - это имя нового элемента созданного в админке а выводить созданная переменная должна заполненное текстовое поле description _____________________________________________________________________________________ Если что-то не понятно описал, могу выложить все файлики и запросы к базе.В планах выложить его в паблик, для дальнейшего использования и доработок Структура базы - прикреплённый файл Изменено 16 июля, 2018 пользователем Chudo Цитата Ссылка на сообщение Поделиться на другие сайты
Maksclub Опубликовано 16 июля, 2018 Жалоба Поделиться Опубликовано 16 июля, 2018 (изменено) Но не могу понять, как мне привести значение переменной, как например у настроек Не городить этот огород (а старый удалить) и просто создать поле в БДСоздать в шаблоне /simpla/design/html/setings.tpl инпут или textarea с уникальным name, например <li><label class=property>Оповещение о заказах</label><input name="company_phone" class="simpla_inp" type="text" value="{$settings->order_company_phone|escape}" /></li> И в контроллере /simpla/SettingAdmin.php просто отловите это значение из POST запроса и присвойте ее этому свойству (дальше расскажу, почему это работает) if($this->request->method('POST')){ ... $this->settings->company_phone = $this->request->post('company_phone'); Все будет работать Как работают настройки в Симпле Есть класс Settings, у него есть магические методы При обращении к любому его свйоству сначала проверяются значения из конфига, если не найдено -- идет запрос в БД в таблицу s_setting Пример: Мы обращаемся к свойству $this->settings->company_phonecompany_phone ищется в файле /config/config.php, такого там нет, далее идет запрос в БД и ищется там, а там опля -- есть такая строка и соответственно берется значение) Соответственно не нужно ничего программировать, нужно просто в эту таблицу добавить строку и получать/писать ее Но ваш способ тоже пригоден (не в сматривался в детали, имею в виду через плагины)Например для вывода баннеров или вывода своего меню или еще какого-то общего функционала Изменено 16 июля, 2018 пользователем Maksclub Цитата Ссылка на сообщение Поделиться на другие сайты
Chudo Опубликовано 16 июля, 2018 Автор Жалоба Поделиться Опубликовано 16 июля, 2018 (изменено) Не городить этот огород (а старый удалить) и просто создать поле в БДСоздать в шаблоне /simpla/design/html/setings.tpl инпут или textarea с уникальным name, например Да, Maksclub. Данный способ мне известен. И более того, я сам его использую. Но, я задался идеей написать модуль, что бы можно было создавать пользовательские переменные «по клику» Изменено 16 июля, 2018 пользователем Chudo Цитата Ссылка на сообщение Поделиться на другие сайты
Chudo Опубликовано 16 июля, 2018 Автор Жалоба Поделиться Опубликовано 16 июля, 2018 (изменено) Думал написать небольшой обработчик, который будет создавать эти переменные из меню настроек.Что-то вроде раздела «Валюта»Писать их в /simpla/SettingAdmin.php и в /simpla/design/html/settings.tpl Но, не хочется загромождать раздел настроек =) Изменено 16 июля, 2018 пользователем Chudo Цитата Ссылка на сообщение Поделиться на другие сайты
Chudo Опубликовано 16 июля, 2018 Автор Жалоба Поделиться Опубликовано 16 июля, 2018 (изменено) Не городить этот огород (а старый удалить) и просто создать поле в БДСоздать в шаблоне /simpla/design/html/setings.tpl инпут или textarea с уникальным name, например По большому счёту, решение рабочее. Но не могу понять как вывести переменную вида {$myvariables->name_myvariable} без {get_myvariables var=myvariable} {if $myvariable} {foreach $myvariable as $m} {if $m->image} {if $m->description} {$m->description} {/if} {/if} {/foreach} {/if} Изменено 16 июля, 2018 пользователем Chudo Цитата Ссылка на сообщение Поделиться на другие сайты
shooroop Опубликовано 16 июля, 2018 Жалоба Поделиться Опубликовано 16 июля, 2018 (изменено) chocolate_moles делал слайдер можете взять его примерhttp://forum.simplacms.ru/topic/5698-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-%D1%81%D0%BB%D0%B0%D0%B9%D0%B4%D0%B5%D1%80/ Изменено 16 июля, 2018 пользователем shooroop Цитата Ссылка на сообщение Поделиться на другие сайты
Chudo Опубликовано 16 июля, 2018 Автор Жалоба Поделиться Опубликовано 16 июля, 2018 chocolate_moles делал слайдер можете взять его примерhttp://forum.simplacms.ru/topic/5698-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-%D1%81%D0%BB%D0%B0%D0%B9%D0%B4%D0%B5%D1%80/ К сожалению, прочитав все 9 страниц, я не увидел решения, которое мне было бы под силу в реализации. Цитата Ссылка на сообщение Поделиться на другие сайты
shooroop Опубликовано 16 июля, 2018 Жалоба Поделиться Опубликовано 16 июля, 2018 К сожалению, прочитав все 9 страниц, я не увидел решения, которое мне было бы под силу в реализации. А зачем читатть 9 страниц? в первом посте архив в нем описание Цитата Ссылка на сообщение Поделиться на другие сайты
Chudo Опубликовано 16 июля, 2018 Автор Жалоба Поделиться Опубликовано 16 июля, 2018 А зачем читатть 9 страниц? в первом посте архив в нем описание В архиве от chocolate_moles тоже нет вариантов решения моей задачи. Может и есть, но я его не понимаю Цитата Ссылка на сообщение Поделиться на другие сайты
shooroop Опубликовано 16 июля, 2018 Жалоба Поделиться Опубликовано 16 июля, 2018 В архиве от chocolate_moles тоже нет вариантов решения моей задачи. Может и есть, но я его не понимаю Ну бывает Визуально покажите что вы хотите сделать в адм части Цитата Ссылка на сообщение Поделиться на другие сайты
Chudo Опубликовано 16 июля, 2018 Автор Жалоба Поделиться Опубликовано 16 июля, 2018 (изменено) Ну бывает Визуально покажите что вы хотите сделать в адм части В админ части уже всё готово. Могу вывести конкретный id функцией {get_myvariables var=myvariable}{foreach $myvariable as $m}{if $m->id == 2}{$m->description}{/if}{/foreach} Хочу добиться её сокращения и привести её в вид {if $myvariable->id == 2} Изменено 16 июля, 2018 пользователем Chudo Цитата Ссылка на сообщение Поделиться на другие сайты
shooroop Опубликовано 16 июля, 2018 Жалоба Поделиться Опубликовано 16 июля, 2018 В админ части уже всё готово. Могу вывести конкретный id функцией {get_myvariables var=myvariable}{foreach $myvariable as $m}{if $m->id == 2}{$m->description}{/if}{/foreach} Хочу добиться её сокращения и привести её в вид {if $myvariable->id == 2} короче уже не будет. {get_myvariables var=myvariable} {foreach $myvariable as $m} //циклом перебираете все из таблицы {if $m->id == 2} // ограничиваете вывод только второй стоки из таблицы {$m->description} // выводите значение из второй строки {/if} {/foreach} Цитата Ссылка на сообщение Поделиться на другие сайты
Chudo Опубликовано 16 июля, 2018 Автор Жалоба Поделиться Опубликовано 16 июля, 2018 короче уже не будет. {get_myvariables var=myvariable} {foreach $myvariable as $m} //циклом перебираете все из таблицы {if $m->id == 2} // ограничиваете вывод только второй стоки из таблицы {$m->description} // выводите значение из второй строки {/if} {/foreach} То есть, от цикла не избавиться? Цитата Ссылка на сообщение Поделиться на другие сайты
Chudo Опубликовано 16 июля, 2018 Автор Жалоба Поделиться Опубликовано 16 июля, 2018 короче уже не будет. {get_myvariables var=myvariable} {foreach $myvariable as $m} //циклом перебираете все из таблицы {if $m->id == 2} // ограничиваете вывод только второй стоки из таблицы {$m->description} // выводите значение из второй строки {/if} {/foreach} Самое короткое, что у меня получилось, это... {get_myvariables var=myvariable} {foreach $myvariable as $m} {if $m->id == 2} {$m->name} {/if} {/foreach} Цитата Ссылка на сообщение Поделиться на другие сайты
shooroop Опубликовано 16 июля, 2018 Жалоба Поделиться Опубликовано 16 июля, 2018 (изменено) То есть, от цикла не избавиться? от цикла нет. вы можете по другому ограничить вывод {assign var='group' value='2'} {get_banners group=$group} {foreach $banners as $banner} {$banner->url} {/foreach} http://forum.simplacms.ru/topic/7140-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-%D1%81%D0%BB%D0%B0%D0%B9%D0%B4%D0%B5%D1%80-%D0%B1%D0%B0%D0%BD%D0%BD%D0%B5%D1%80%D0%BE%D0%B2-%D0%B4%D0%BB%D1%8F-simpla-%D0%BE%D1%82-cernos/ Изменено 16 июля, 2018 пользователем shooroop Цитата Ссылка на сообщение Поделиться на другие сайты
Chudo Опубликовано 16 июля, 2018 Автор Жалоба Поделиться Опубликовано 16 июля, 2018 от цикла нет. вы можете по другому ограничить вывод {assign var='group' value='2'} {get_banners group=$group} {foreach $banners as $banner} {$banner->url} {/foreach} http://forum.simplacms.ru/topic/7140-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C-%D1%81%D0%BB%D0%B0%D0%B9%D0%B4%D0%B5%D1%80-%D0%B1%D0%B0%D0%BD%D0%BD%D0%B5%D1%80%D0%BE%D0%B2-%D0%B4%D0%BB%D1%8F-simpla-%D0%BE%D1%82-cernos/Тоже длинный получается. Спасибо тебе shooroop за то, что не остался в стороне) Но я всё таки буду пытаться написать так, что бы можно было дёргать принудительно по id конкретный блок Цитата Ссылка на сообщение Поделиться на другие сайты
ABSORBER Опубликовано 18 июля, 2018 Жалоба Поделиться Опубликовано 18 июля, 2018 В БД, в таблице __settings добавить поле siteinfo с типом text, в нем хранить json данные в админке сделать отдельный блок c:input text name=siteinfo[name][]input text name=siteinfo[value][] на js дописать что бы можно было дублировать блоки.результат что-то такое:https://s.mail.ru/C5fn/heeJV5yKg разумеется прежде чем писать в БД, мы это дело приводим в нужный видв SettingsAdmin.php в post: // Информация о сайте $siteinfo = array(); foreach($this->request->post('siteinfo') as $n => $si) { foreach($si as $i => $s) { if(empty($siteinfo[$i]) AND !empty($s)) $siteinfo[$i] = new stdClass; if(!empty($s)) { if($n == 'name') $s = str_replace('-', '', $this->translit($s)); $siteinfo[$i]->$n = $s; } } } $this->settings->siteinfo = json_encode($siteinfo); На выходе будет json в таком виде: { "1": { "name": "job_time", "value": "ПН-ВС, с 08:00 до 21:00" }, "2": { "name": "main_phone", "value": "123123123" } } т.к. по умолчанию в cms есть запрос к настройкам сайта, то не надо будет городить отдельный запрос.в api/Settings.php делаем проверку типа: // Выбираем из базы настройки $this->db->query('SELECT name, value FROM __settings'); // и записываем их в переменную foreach($this->db->results() as $result) { if(!($this->vars[$result->name] = @unserialize($result->value))) { // Делаем доступными параметры $settings->siteinfo.NAME_PARAMETER if ($result->name == 'siteinfo') { $siteinfo_value = []; foreach (json_decode($result->value) as $siteinfo) { $siteinfo_value[$siteinfo->name] = $siteinfo->value; } $result->value = $siteinfo_value; } $this->vars[$result->name] = $result->value; } } на сайте выводим:{$settings->siteinfo.job_time}{$settings->siteinfo.main_phone} Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 18 июля, 2018 Жалоба Поделиться Опубликовано 18 июля, 2018 (изменено) а зачем все эти танцы с php?Там штатные функции сохраняют сериализованный массив. $this->settings->siteinfo = [тут только формируем нужный массив из post]; Как работают настройки в Симпле Есть класс Settings, у него есть магические методы При обращении к любому его свйоству сначала проверяются значения из конфига, если не найдено -- идет запрос в БД в таблицу s_setting Пример: Мы обращаемся к свойству $this->settings->company_phonecompany_phone ищется в файле /config/config.php, такого там нет, далее идет запрос в БД и ищется там, а там опля -- есть такая строка и соответственно берется значение) увы, но этот класс Settings вообще не так работает.С config он никак не связан и ничего там не проверяет. При вызове конструктора он делает разовый запрос к БД и сохраняет все полученные данные в локальную переменную. После при обращении через маг. методы он берет значение по ключу уже из локального массива. А поиск по ключу запросом к БД - делается лишь только при записи значения через __set Изменено 18 июля, 2018 пользователем yr4ik Цитата Ссылка на сообщение Поделиться на другие сайты
Maksclub Опубликовано 18 июля, 2018 Жалоба Поделиться Опубликовано 18 июля, 2018 (изменено) увы, но этот класс Settings вообще не так работает.С config он никак не связан и ничего там не проверяет. При вызове конструктора он делает разовый запрос к БД и сохраняет все полученные данные в локальную переменную. После при обращении через маг. методы он берет значение по ключу уже из локального массива. А поиск по ключу запросом к БД - делается лишь только при записи значения через __set а ну по памяти писал, сплоховала значит, прошу прощения Изменено 18 июля, 2018 пользователем Maksclub Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 18 июля, 2018 Жалоба Поделиться Опубликовано 18 июля, 2018 По-моему, все можно реализовать куда проще, примерно так: public function get_myvariables_plugin($params, &$smarty) { if(!empty($params['var'])){ $mvs=array(); foreach($this->myvariables->get_myvariables($params) as $mv) $mvs[$mv->id]=$mv; $smarty->assign($params['var'], $mvs); } } Цитата Ссылка на сообщение Поделиться на другие сайты
Chudo Опубликовано 18 июля, 2018 Автор Жалоба Поделиться Опубликовано 18 июля, 2018 (изменено) Решил написать этот модуль вообще по другому.Как и обещал, готовое решение -->http://forum.simplacms.ru/topic/13639-создание-новых-произвольных-переменных-для-их/ Изменено 18 июля, 2018 пользователем Chudo Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.