Всего 125 671 комментарий

SYAN
13 апреля 2021, 11:08
0
ну и не забываем включить jquery на сайте
Lori
13 апреля 2021, 10:05
0
возможно дело в том, что плагин работает при событии OnDocFormRender, а в вашем примере OnDocFormPrerender. Сейчас проверю
Николай Савин
13 апреля 2021, 09:56
0
Все там работает — я же не из головы взял код, а прямо из действующего проекта пример привел.
Lori
13 апреля 2021, 09:54
0
не работает к сожалению ваш пример. теперь вкладка нигде не выводится в принципе
Николай Савин
13 апреля 2021, 09:53
0
В целом да, но сравните с моим примером. Там читаемость получше будет. Меньше вложенности.
Николай Савин
13 апреля 2021, 09:52
0
можно ли в этом поле выводить значение tv дочернего ресурса
По умолчанию нельзя конечно. У нас доступны только поля текущего ресурса.
Навскидку вижу два пути решения вопроса.
1. Сделать небольшую инъекцию в процессор get — где просто добавить нужное поле
2. В JS скрипте при его загрузке делать ajax или fetch запрос за нужными данными и уже там подмешивать куда нужно значение поля
Lori
13 апреля 2021, 09:51
0
правильно ли я сделал:
Ext.ComponentMgr.onAvailable('modx-panel-resource', function(){
//Подключаем по id
if(this.record.id == 452) {
тут остальной код tab.js
}
});
Николай Савин
13 апреля 2021, 09:47
0
где мне в tab.js проверить id ресурса?
Ну правильнее всего в начале скрипта первой строкой
Lori
13 апреля 2021, 09:41
0
а, нет пардон, не получилось.
код плагина:
<?php

if($modx->event->name != 'OnDocFormRender') return '';

$modx->controller->addLastJavascript('/assets/components/mynamespace/js/tab.js');
Код tab.js:
Ext.override(MODx.panel.Resource, {
   getParentFields: MODx.panel.Resource.prototype.getFields,
    
   getFields: function(config){
       
       var parentFields = this.getParentFields.call(this, config);
       
       for(var i in parentFields) {
           var item = parentFields[i];
           
           if(item.id == 'modx-resource-tabs') {
               item.items.push({
                    id: 'my-custom-tab'
                    ,autoHeight: true
                    ,title: 'Редактирование новостей'
                    ,layout: 'form'
                    ,anchor: '100%'
                    ,items: [{
                        html: '<p>Тут можно привязать товары к новостям</p>'
                        ,bodyCssClass: 'panel-desc'
                        ,border: false
                    },{
                        layout: 'column',
                        width: '100%',
                        anchor: '100%',
                        cls: 'main-wrapper',
                        items: [{
                            columnWidth: .5,
                            items: [{
                                xtype: 'numberfield',
                                fieldLabel: '<span>Выберите новость</span>',
                                width: '100%',
                            }]
                        }, {
                            columnWidth: .5,
                            items: [{
                                xtype: 'textfield',
                                fieldLabel: '<span>Введите ID товаров через запятую</span>',
                                width: '100%',
                            }]
                        }]
                    }]
               });
           }
       }
       
       return parentFields;
   } 
});
где мне в tab.js проверить id ресурса?
Lori
13 апреля 2021, 09:30
0
круто, получилось! а не подскажете, можно ли в этом поле выводить значение tv дочернего ресурса, чтобы я мог его тут редактировать? такое возможно?
Николай Савин
13 апреля 2021, 09:22
+2
Да конечно возможно.
Если вы добавляете дополнительное текстовое поле в админке — то у вас всегда доступен объект this.record где есть все поля ресурса. Там вы без проблем можете получить доступ и к Id страницы, и к шаблону и родителю и любому другому полю, которое подходит для фильтрации

switch ($modx->event->name) {    
    case 'OnDocFormPrerender':
        $modx->controller->addHtml("
        <script type='text/javascript'>

         Ext.ComponentMgr.onAvailable('modx-panel-resource', function(){
             //Подключаем по id
             if(this.record.id !== 1) {return;}
             //Подключаем по template
             if(this.record.id !== 4) {return;}
            //Подключаем по parent
             if(this.record.parent !== 10) {return;}

             const leftCol = this.items[1].items[0].items[0].items[0];

             const en_title = {
               anchor: '100%',
               description: '<b>[[*en_pagetitle]]</br>Заголовок на английском</b>',
               fieldLabel: 'Заголовок на английском',
               id: 'modx-resource-en-pagetitle',
               maxLength:255,
               msgTarget: 'under',
               name:'en_pagetitle',
               xtype:'textfield'
            }
            leftCol.items.splice(1, 0,  en_title);

        });
    </script>");
        break;
}
Николай Савин
13 апреля 2021, 09:15
0
Нет, думаю там все необходимые скрипты подключаются автоматически.
Возможно у вас ошибка где то в JS которая ломает все другие скрипты. Посмотрите нет ли в консоли разработчика ошибок?
Второй шаг посмотрите исходный код страницы на которой подключена форма. Видно ли там подключенный js скрипт компонента? Если видно — откройте его — доступен ли он
Zulya
13 апреля 2021, 08:48
0
Добрый день, Николай!
Я попробовала так:
[[HelpfulPage?
&tpl=`tpl.helpfulPageTpl2`
]]
Но при клике на кнопки Да, Нет, открывается главная страница сайта. Что-то не срабатывает.
Смотрела демо страницу megawebs.kz/helpfulpage Но там кнопки работают. Может необходимо подключить дополнительные какие-нибудь js файлы чтобы кнопки Да или Нет сработали?
Lori
13 апреля 2021, 08:46
0
тут просто TV не подойдет. Просто сама суть задачи: вывести два поля: выпадающий список и просто текстовое поле. В выпадающем списке дочерние ресурсы и при их выборе в текстовом выводится значение одной TV-шки выбранного ресурса. Мне бы просто узнать условие какое писать в плагине? Проверять если id ресурса равно условно 3, то добавить ему кастомное поле, верно?
Наумов Алексей
13 апреля 2021, 08:41
+1
Сделать этому ресурсу отдельный шаблон и добавить TV-шки.
Николай Савин
13 апреля 2021, 07:45
0
Здравствуйте. Документацию не писал. Что там внутри уже не помню, так как сделал и забыл.
Андрей
13 апреля 2021, 00:30
0
Возможно это что то с importX, в любом случае пропадать они точно не должны после импорта, ровно как и значения в TV, надо смотреть уже конкретно в данном частном случает.
Zulya
13 апреля 2021, 00:27
0
Здравствуйте! Не могу найти документацию. Подскажите ссылку на документацию. Не знаю как выводить такой блок на страницах. Заранее спасибо!
SYAN
12 апреля 2021, 23:33
0
предлагаю рабочее решение pdoPage под fenom с загрузкой ajax

<div id="pdopage">
    <div class='row'>
	{'!pdoPage' | snippet : [
		'parents' => '0',
		'limit' => '10',
		...			
		'toPlaceholder' => 'result',
		'ajaxMode' => 'button',
                'ajaxElemWrapper' => '#pdopage'
                'ajaxElemRows' => '#pdopage .row'
                'ajaxElemPagination' => '#pdopage .pagination'
                'ajaxTplMore' => '@INLINE <div class="text-center"><button class="btn btn-primary btn-more">Загрузить еще</button></div>'
	]}
        {'result' | placeholder}			
    </div>
     {'page.nav' | placeholder}
</div>