1
votes

I would like to say that Im struggling with understanding the portal demo in ExtJS 4. Can someone please just provide me a generic example of a container and how to add a portlet item. The docs provided with the download do not have the word portal or portlet when I do the search. When I look at the source of the example there are classes files and extra CSS files too. Are those needed? I have searched all over the web and only seem to find other people asking the same question. Any help or even a link to a demo for extjs 4 would be greatly appreciated. Maybe my googlefoo is lacking?

When I use the demo and start modifying the border layout I run into all sorts of issues. The center region cannot contain a tab panel, I use accordion layouts for my east, west, and north regions. There seems to be an issue with the West region and having an accordion layout because it does not display properly ie. the accordion is like half open and any images inside do not display unless you collapse and then re-open. Would someone be able to provide me with an example that just shows how to make a basic portal without any added functionality? Below is the code I was using that was not working properly but displays and works fine (except for the portal part) when using just a viewport.

Here is some example code

Ext.define('Ext.app.Portal', {

    extend: 'Ext.container.Viewport',

    uses: ['Ext.app.PortalPanel'],

    initComponent: function(){
        Ext.apply(this, Ext.create('Ext.Viewport', {
            id: 'main-viewport',
            layout: {
                type: 'border',
                padding: '0 5 5 5'
            },
            items: [{
                title: 'My Notifications',
                id: 'My-Notifications-Panel',
                region: 'north',
                height: 300,
                split: true,
                collapsible: true,
                collapsed: true,
                margins: '0 0 0 0',
                layout: 'accordion',
                items: [
                {
                    title: 'Alerts'
                },{
                    title: 'Communications'
                }
                ]
            },{
                title: 'My Support',
                id: 'My-Support-Panel',
                region: 'east',
                width: 140,
                collapsible: true,
                collapsed: true,
                margins: '0 0 0 0',
                layout: 'column',
                autoScroll: true,
                defaults: {
                    margins: '10 5 0 0',
                    xtype: 'panel',
                    height: 100,
                    width: '100%',
                    headerPosition: 'bottom',
                    border: false,
                    cls: 'myicon',
                    bodyStyle: 'background-image: url(images/icon.png); background-repeat: no-repeat; background-position: center;'
                },
                items:[
                    {
                        title: 'Customer Services'
                    },{
                        title: 'Technical Support',
                        listeners: {
                            afterrender: function(c){
                                c.el.on('click', function(){
                                    CreateChatSession();
                                    Ext.getCmp('My-Support-Chat-Panel').update('<iframe width="100%" height="700" src="/pub/" frameborder="0"></iframe>');
                                });
                            }
                        }
                    }
                ]
            },{
                xtype: 'panel',
                region: 'west',
                collapsible: true,
                collapsed: true,
                title: 'My Apps',
                width: 275,
                layout:'accordion',
                split: true,
                margins: '0 0 0 0',
                defaults: {
                    bodyStyle: 'padding:15px',
                    layout: 'column'
                },
                items: [{
                    title: 'Internal Apps',
                    defaults: {
                        padding: '5 5 5 5',
                        xtype: 'panel',
                        height: 100,
                        width: 80,
                        headerPosition: 'bottom',
                        border: false,
                        cls: 'myicon',
                        bodyStyle: 'background-image: url(images/icon.png); background-repeat: no-repeat; background-position: center;'
                    },
                    items: []
                },{
                    title: 'Favorites',
                    defaults: {
                        padding: '5 5 5 5',
                        xtype: 'panel',
                        height: 100,
                        width: 80,
                        headerPosition: 'bottom',
                        border: false,
                        cls: 'myicon',
                        bodyStyle: 'background-image: url(images/icon.png); background-repeat: no-repeat; background-position: center;'
                    },
                    items: []
                },{
                    title: 'Reporting',
                    defaults: {
                        padding: '5 5 5 5',
                        xtype: 'panel',
                        height: 100,
                        width: 80,
                        headerPosition: 'bottom',
                        border: false,
                        cls: 'myicon',
                        bodyStyle: 'background-image: url(images/icon.png); background-repeat: no-repeat; background-position: center;'
                    },
                    items: []
                }]
            },
                Ext.create('Ext.tab.Panel', {
                    region: 'center',
                    layout: 'fit',
                    items: [{
                        id: 'Workspace-1',
                        title: 'Workspace 1',
                        layout: 'fit',
                        items: [{
                            id: 'app-portal',
                            xtype: 'portalpanel',
                            region: 'center',
                            items: [{
                                id: 'col-1',
                                items: [{
                                    id: 'portlet-2',
                                    title: 'Portlet 2',
                                    listeners: {
                                        'close': Ext.bind(this.onPortletClose, this)
                                    }
                                }]
                            },{
                                id: 'col-2',
                                items: [{
                                    id: 'portlet-3',
                                    title: 'Portlet 3',
                                    listeners: {
                                        'close': Ext.bind(this.onPortletClose, this)
                                    }
                                }]
                            }]
                        }]
                    }]
                })
            ]
        }));
        this.callParent(arguments);
    }
});
2
The source in that example will show you exactly how they accomplished what they did. Perhaps if you could make your question a bit more specific someone out there could help a bit more. - LittleTreeX
I have edited my question and added sample code - DvideBy0

2 Answers

2
votes

It'ss the portal example with tabs in center region

Hope this will help you.

Ext.define('Ext.app.Portal', {

    extend: 'Ext.container.Viewport',

    getTools: function() {
        return [{
            xtype: 'tool',
            type: 'gear',
            handler: function(e, target, panelHeader, tool) {
                var portlet = panelHeader.ownerCt,
                    el = portlet.getEl();

                el.mask('Working...');
                Ext.defer(el.unmask, 2000, el);
            } //eo handler function
        }]; //eo return
    }, //eo get tools

    initComponent: function() {

        var content = '<div class="portlet-content">' + Ext.example.shortBogusMarkup + '</div>';

        Ext.apply(this, {
            id: 'app-viewport',
            layout: {
                type: 'border',
                padding: '0 5 5 5'
            }, //eo layout
            items: [{ //header : item 1 of app-viewport
                    id: 'app-header',
                    xtype: 'box',
                    region: 'north',
                    height: 50,
                    html: 'myPortal'
                },
                { //container : item 2 of app-viewport
                    xtype: 'container',
                    region: 'center',
                    layout: 'border',
                    items: [{ //options: item 1 of container
                            id: 'app-options',
                            title: 'Options',
                            region: 'west',
                            animCollapse: true,
                            width: 200,
                            minWidth: 150,
                            maxWidth: 400,
                            split: true,
                            collapsible: true,
                            layout: 'accordion',
                            layoutConfig: {
                                animate: true
                            },
                            items: [{ //item 1 of app-options

                                    title: 'title',
                                    autoScroll: true,
                                    border: false,
                                    iconCls: 'nav',
                                    items: [{
                                        xtype: 'treepanel',
                                        useArrows: true,
                                        autoScroll: true,
                                        animate: true,
                                        enableDD: true,
                                        containerScroll: true,
                                        border: false,
                                        region: 'west',
                                        split: true,

                                        listeners: {
                                            click: function(n) {
                                                Ext.Msg.alert('Navigation Tree Click', 'You clicked: "' + n.attributes.text + '"');
                                            }
                                        }
                                        /*Dashboard
                                        MultiServices
                                        Reporting
                                        Global Options
                                        */
                                    }]

                                },
                                { //settings : item 2 of app-options
                                    title: 'Settings',
                                    html: '<div class="portlet-content">' + 'details ??' + '</div>',
                                    border: false,
                                    autoScroll: true,
                                    iconCls: 'settings'
                                }
                            ] //eo items options
                        },
                        { //item 2 of container
                            id: 'tabpanel1', // id: 'app-portal',  ???
                            xtype: 'tabpanel',
                            activeTab: 0,
                            region: 'center',
                            items: [{
                                title: 'tab1',
                                layout: 'column', //
                                closable: true,
                                items: [{
                                    id: 'col-1',
                                    columnWidth: 0.5,
                                    flex: 1,
                                    items: [{
                                        id: 'portlet-1',
                                        title: 'Grid Portlet',
                                        tools: this.getTools(),
                                        items: new Ext.app.GridPortlet(),
                                        listeners: {
                                            'close': Ext.bind(this.onPortletClose, this)
                                        }
                                    }, {
                                        id: 'portlet-2',
                                        title: 'Portlet 2',
                                        tools: this.getTools(),
                                        html: content,
                                        listeners: {
                                            'close': Ext.bind(this.onPortletClose, this)
                                        }
                                    }] //eo col-1
                                }, {
                                    id: 'col-2',
                                    columnWidth: 0.5,
                                    flex: 1,
                                    items: [{
                                        id: 'portlet-3',
                                        title: 'Portlet 3',
                                        tools: this.getTools(),
                                        html: '<div class="portlet-content">' + Ext.example.bogusMarkup + '</div>',
                                        listeners: {
                                            'close': Ext.bind(this.onPortletClose, this)
                                        }
                                    }] //eo col-2
                                }, {
                                    id: 'col-3',
                                    columnWidth: 0.5,
                                    flex: 1,
                                    margins: '0 26 0 0',
                                    items: [{
                                        id: 'portlet-4',
                                        title: 'Chart Portlet',
                                        tools: this.getTools(),
                                        items: new Ext.app.ChartPortlet(),
                                        listeners: {
                                            'close': Ext.bind(this.onPortletClose, this)
                                        }
                                    }] //eo col-3
                                }] //eo tab1
                            }, {
                                title: 'tab2',
                                closable: true
                            }] //eo items tabpanel
                        }
                    ] //eo ietms container

                }
            ] //eo viewport
        }); //eo apply

        this.callParent(arguments);
    }, //eo initcomponent

    onPortletClose: function(portlet) {
        this.showMsg('"' + portlet.title + '" was removed');
    },

    showMsg: function(msg) {
        var el = Ext.get('app-msg'),
            msgId = Ext.id();

        this.msgId = msgId;
        el.update(msg).show();

        Ext.defer(this.clearMsg, 3000, this, [msgId]);
    },

    clearMsg: function(msgId) {
        if (msgId === this.msgId) {
            Ext.get('app-msg').hide();
        }
    }
});

EDIT

Or u can try this example I think it suits better ur needs ,let me know.

4
votes

----------- Just for anyone who reads this Portal Layout IS NOT part of the official framework and is a 3rd party extension bundled with the library, which is why it is not in the docs.