Глупый вопрос: типы контента
Как получить типы контента для формы
Наверное это глупый вопрос.
Мне нужно написать дополнение, заодно и поизучать как работает Instantcms.
Но уперся в проблему.
Делаю дополнение в админку. Только backend.
Нужно в параметрах form выбрать тип контента. Пытаюсь выбрать список типов контента из модели content, но пишет ошибку.
В NetBeans не видит методов работы с моделью content.
Может где почитать, какие классы и их методы откуда доступны, а откуда нет?
Делаю как по документации $this-model_content->getContentTypes(), Но выдает ошибку, нет мол такого метода…
Попробуйте так:
cmsCore::getModel('content')->getContentTypes()
@sergvm,
Попробуйте так:
cmsCore::getModel('content')->getContentTypes()
Это работает. Я проверял. Но в документации написано:
В версиях InstantCMS выше 2.8.2, можно использовать обращением к динамическим свойствам $this→model_CONTROLLER_NAME, где CONTROLLER_NAME название требуемого контроллера, к модели которого нужно подключиться. Пример выше можно переписать вот так:
// Получаем данные из модели users $users = $this->model_users->getUsers();
Такая конструкция существенно сокращает код. И она применяется в движке, я смотрел.
Получается, что она не везде может вызываться?
Как я понимаю, вы хотите это сделать в классе формы. Там это не работает, только из контроллеров.Нужно в параметрах form выбрать тип контента
Как я понимаю, вы хотите это сделать в классе формы. Там это не работает, только из контроллеров.Нужно в параметрах form выбрать тип контента
Извините, но прочитайте предыдущий ответ.
Работает, но не все как в документации
И в том-то вопрос, где описано в документации, что работает и из чего: какие классы и откуда доступны?
Работа с моделью в контроллерах.Работает, но не все как в документации
Но наверное да, не слишком очевидно написано, дополнил.
Вы лучше сразу приводите пример кода или контекст, о чем вы спрашиваете, сходу не совсем понятно.
Это подключение собственной модели.
Работа с моделью в контроллерах.Работает, но не все как в документации
Но наверное да, не слишком очевидно написано, дополнил.
Вы лучше сразу приводите пример кода или контекст, о чем вы спрашиваете, сходу не совсем понятно.
А я речь веду о подключении модели content, например, (о чем и писал выше). Т.е. это подходит под определение "Подключение чужой модели"
Как в документации
pastenow.ru/edit/b1182c4559af3f11bf81c730b56d77fb
Я вам на скриншоте выделил красным, чтобы вы поняли, что в документации всё описано логично, ни о каких классах форм там не сказано. Кроме этого, повторяю, я добавил сейчас в документацию все слова, чтобы интерпретация описания стала максимально однозначной.Это подключение собственной модели.
Подобные вызовы доступны из контекста контроллера, т.е. из его фронтэнда, бэкенда и экшенов.
Если вам по прежнему не понятно, приведите часть своего кода.
Я вам на скриншоте выделил красным, чтобы вы поняли, что в документации всё описано логично, ни о каких классах форм там не сказано. Кроме этого, повторяю, я добавил сейчас в документацию все слова, чтобы интерпретация описания стала максимально однозначной.Это подключение собственной модели.
Подобные вызовы доступны из контекста контроллера, т.е. из его фронтэнда, бэкенда и экшенов.
Если вам по прежнему не понятно, приведите часть своего кода.
Спасибо за добавление, увидел ( Не обновил кэш страницы со справкой :))
Хотя у меня в form работает и такой код:
class formImpexpOptions extends cmsForm { public function init() { 'type' => 'fieldset', 'title' => 'Файл импорта:', )), 'title' => 'Тип контента:', 'items' => array_column(cmsCore::getModel('content')->getContentTypes(),'title','id'), )), ) ) ); } }
'title' => LANG_CONTENT_TYPE, 'generator' => function($item) { $model = cmsCore::getModel('content'); $tree = $model->getContentTypes(); if ($tree) { foreach ($tree as $item) { $items[$item['id']] = $item['title']; } } return $items; }, )),
'title' => LANG_CONTENT_TYPE, 'items' => array_collection_to_list(cmsCore::getModel('content')->get('content_types'), 'id', 'title') )),
Я не разработчик, но рискну ответить — подключать надо там, где она вам нужна.Раз уж вы разработчик, то задам еще вопрос: откуда оптимальнее(правильнее) подключать чужую модель в плане производительности: контроллер или экшн?
Что будет экономнее в плане потребления памяти?
$model = cmsCore::getModel('content'); $tree = $model->getContentTypes();
$tree = cmsCore::getModel('content')->getContentTypes();
Причем переменная $model = cmsCore::getModel('content'); — это не два байта, это достаточно большой объем.
Если уж говорить об оптимизации и потреблении памяти, то и все поля таблицы читать не обязательно, достаточно двух полей — id, title))
P.S. Кстати, учитывайте тот факт, что форма, это не та страница, которая нуждается в сверхоптимизации. Сколько форм отправляют ежедневно ваши пользователи и сколько миллисекунд вы на этом выиграете?))
Увы, тогда всё равно придется получить полностью массив типов контента, а потом перебрать его и получить только id и title.Если уж говорить об оптимизации и потреблении памяти, то и ве поля таблицы читать не обязательно, достаточно двух полей — id, title))
Массив все равно будет висеть в оперативке. Плюс операции на извлечение двух индексов, плюс еще куча переменных.
Наверно мы живем в разных мирах или я просто не умею объяснять. Прочувствуйте разницу между getContentTypes(), которая читает все поля таблицы иУвы, тогда всё равно придется получить полностью массив типов контента, а потом перебрать его и получить только id и title. Массив все равно будет висеть в оперативке. Плюс операции на извлечение двух индексов, плюс еще куча переменных.
$model->selectOnly('id')->select('title')->get('content_types');
Я вопрос не понял. Экшн это часть контроллера. Подключайте любым способом, как удобнее, что здесь обсуждали.Раз уж вы разработчик, то задам еще вопрос: откуда оптимальнее(правильнее) подключать чужую модель в плане производительности: контроллер или экшн?
Равнозначно. Новый объект модели будет создан и там и там. Условная переменная всего лишь ссылка не него.Что будет экономнее в плане потребления памяти?
PHP подчищает за собой автоматически. Ансетить переменные без явной необходимости (когда у вас в переменной десятки мегабайт, какой-то цикл и т.п.) нет смысла. Экономить на спичках тоже.С точки зрения дилетанта, лишняя переменная болтающаяся в оперативке, занимает лишнюю память.
Именно.Кстати, учитывайте тот факт, что форма, это не та страница, которая нуждается в сверхоптимизации