Magento 2

Magento 2: How to add grid to the tab in customer_index_edit

Please follow below steps
 
admin layout xml app\code\Sugarcode\Test\view\adminhtml\layout\test_lists_edit.xml
 
<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-2columns-left" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
    <head>
        <css src="jquery/fileUploader/css/jquery.fileupload-ui.css"/>
    </head>
    <update handle="editor"/>
    <body>
        <referenceContainer name="content">
            <block class="Sugarcode\Test\Block\Adminhtml\Lists\Edit" name="list_post_edit"/>
        </referenceContainer>
        <referenceContainer name="left">
            <block class="Sugarcode\Test\Block\Adminhtml\Lists\Edit\Tabs" name="list_post_edit_tabs">
                <block class="Sugarcode\Test\Block\Adminhtml\Lists\Edit\Tab\Main" name="list_post_edit_tab_main"/>
                <action method="addTab">
                    <argument name="name" xsi:type="string">main_section</argument>
                    <argument name="block" xsi:type="string">list_post_edit_tab_main</argument>
                </action>
            </block>
        </referenceContainer>
    </body>
</page>
controller where you need to check id is there or not to fill form and save the data in register
 
app\code\Sugarcode\Test\Controller\Adminhtml\Lists\Edit.php
 
<?php
 
namespace Sugarcode\Test\Controller\Adminhtml\Lists;
 
use Magento\Backend\App\Action;
 
class Edit extends \Magento\Backend\App\Action
{
    /**
     * Core registry
     *
     * @var \Magento\Framework\Registry
     */
    protected $_coreRegistry = null;
 
    /**
     * @var \Magento\Framework\View\Result\PageFactory
     */
    protected $resultPageFactory;
 
    /**
     * @param Action\Context $context
     * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
     * @param \Magento\Framework\Registry $registry
     */
    public function __construct(
        Action\Context $context,
        \Magento\Framework\View\Result\PageFactory $resultPageFactory,
        \Magento\Framework\Registry $registry
    ) {
        $this->resultPageFactory = $resultPageFactory;
        $this->_coreRegistry = $registry;
        parent::__construct($context);
    }
 
    /**
     * {@inheritdoc}
     */
    protected function _isAllowed()
    {
        return true;
    }
 
    /**
     * Init actions
     *
     * @return \Magento\Backend\Model\View\Result\Page
     */
    protected function _initAction()
    {
        // load layout, set active menu and breadcrumbs
        /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
        $resultPage = $this->resultPageFactory->create();
        $resultPage->setActiveMenu('Sugarcode_Test::test')
            ->addBreadcrumb(__('Lists'), __('Lists'))
            ->addBreadcrumb(__('Manage Info'), __('Manage Info'));
        return $resultPage;
    }
 
    /**
     * Edit Blog Post
     *
     * @return \Magento\Backend\Model\View\Result\Page|\Magento\Backend\Model\View\Result\Redirect
     * @SuppressWarnings(PHPMD.NPathComplexity)
     */
    public function execute()
    {
        // 1. Get ID and create model
        $id = $this->getRequest()->getParam('id');
        $model = $this->_objectManager->create('Sugarcode\Test\Model\Test');
 
        // 2. Initial checking
        if ($id) {
            $model->load($id);
            if (!$model->getId()) {
                $this->messageManager->addError(__('This info no longer exists.'));
                /** \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
                $resultRedirect = $this->resultRedirectFactory->create();
 
                return $resultRedirect->setPath('*/*/');
            }
        }
 
        // 3. Set entered data if was error when we do save
        $data = $this->_objectManager->get('Magento\Backend\Model\Session')->getFormData(true);
        if (!empty($data)) {
            $model->setData($data);
        }
 
        // 4. Register model to use later in blocks
        $this->_coreRegistry->register('lists', $model);
 
        // 5. Build edit form
        /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
        $resultPage = $this->_initAction();
        $resultPage->addBreadcrumb(
            $id ? __('Edit Info') : __('New Info'),
            $id ? __('Edit info') : __('New Info')
        );
        $resultPage->getConfig()->getTitle()->prepend(__('Info'));
        $resultPage->getConfig()->getTitle()
            ->prepend($model->getId() ? $model->getTitle() : __('New Info'));
 
        return $resultPage;
    }
}
lets move on to block app\code\Sugarcode\Test\Block\Adminhtml\Lists\Edit.php
 
<?php
 
namespace Sugarcode\Test\Block\Adminhtml\Lists;
 
class Edit extends \Magento\Backend\Block\Widget\Form\Container
{
    /**
     * Core registry
     *
     * @var \Magento\Framework\Registry
     */
    protected $_coreRegistry = null;
 
    /**
     * @param \Magento\Backend\Block\Widget\Context $context
     * @param \Magento\Framework\Registry $registry
     * @param array $data
     */
    public function __construct(
        \Magento\Backend\Block\Widget\Context $context,
        \Magento\Framework\Registry $registry,
        array $data = []
    ) {
        $this->_coreRegistry = $registry;
        parent::__construct($context, $data);
    }
 
    /**
     * Initialize blog post edit block
     *
     * @return void
     */
    protected function _construct()
    {
        $this->_objectId = 'id';
        $this->_blockGroup = 'Sugarcode_Test';
        $this->_controller = 'adminhtml_lists';
 
        parent::_construct();
 
        $this->buttonList->update('save', 'label', __('Save Info'));
        $this->buttonList->add(
            'saveandcontinue',
            [
                'label' => __('Save and Continue Edit'),
                'class' => 'save',
                'data_attribute' => [
                    'mage-init' => [
                        'button' => ['event' => 'saveAndContinueEdit', 'target' => '#edit_form'],
                    ],
                ]
            ],
            -100
        );
 
        $this->buttonList->update('delete', 'label', __('Delete List'));
    }
 
    /**
     * Retrieve text for header element depending on loaded post
     *
     * @return \Magento\Framework\Phrase
     */
    public function getHeaderText()
    {
        if ($this->_coreRegistry->registry('lists')->getId()) {
            return __("Edit List '%1'", $this->escapeHtml($this->_coreRegistry->registry('lists')->getTitle()));
        } else {
            return __('New Info');
        }
    }
 
    /**
     * Getter of url for "Save and Continue" button
     * tab_id will be replaced by desired by JS later
     *
     * @return string
     */
    protected function _getSaveAndContinueUrl()
    {
        return $this->getUrl('test/*/save', ['_current' => true, 'back' => 'edit', 'active_tab' => '{{tab_id}}']);
    }
 
    /**
     * Prepare layout
     *
     * @return \Magento\Framework\View\Element\AbstractBlock
     */
    protected function _prepareLayout()
    {
        $this->_formScripts[] = "
            function toggleEditor() {
                if (tinyMCE.getInstanceById('page_content') == null) {
                    tinyMCE.execCommand('mceAddControl', false, 'content');
                } else {
                    tinyMCE.execCommand('mceRemoveControl', false, 'content');
                }
            };
        ";
        return parent::_prepareLayout();
    }
 
}
as like in magneto1.x here alo we have mode which default folder name is edit so create folder called edit then create below files
 
app\code\Sugarcode\Test\Block\Adminhtml\Lists\Edit\Form.php
 
<?php
 
namespace Sugarcode\Test\Block\Adminhtml\Lists\Edit;
 
/**
 * Adminhtml blog post edit form block
 *
 * @author      Magento Core Team <core@magentocommerce.com>
 */
class Form extends \Magento\Backend\Block\Widget\Form\Generic
{
    /**
     * Prepare form
     *
     * @return $this
     */
    protected function _prepareForm()
    {
        /** @var \Magento\Framework\Data\Form $form */
        $form = $this->_formFactory->create(
            ['data' => ['id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post']]
        );
        $form->setUseContainer(true);
        $this->setForm($form);
        return parent::_prepareForm();
    }
}
app\code\Sugarcode\Test\Block\Adminhtml\Lists\Edit\tabs.php
 
<?php
namespace Sugarcode\Test\Block\Adminhtml\Lists\Edit;
 
/**
 * Admin page left menu
 */
class Tabs extends \Magento\Backend\Block\Widget\Tabs
{
    /**
     * @return void
     */
    protected function _construct()
    {
        parent::_construct();
        $this->setId('post_tabs');
        $this->setDestElementId('edit_form');
        $this->setTitle(__('Information'));
    }
}
now create folder called form and file main.php as per layout xml this will load in form container if you need tabs then you need to use interface
 
class Main extends \Magento\Backend\Block\Widget\Form\Generic implements \Magento\Backend\Block\Widget\Tab\TabInterface
then interface function needs to be implemented here in below code below Prepare label for tab are for tabs app\code\Sugarcode\Test\Block\Adminhtml\Lists\Edit\Tab\Main.php
 
<?php
 
namespace Sugarcode\Test\Block\Adminhtml\Lists\Edit\Tab;
 
/**
 * Blog post edit form main tab
 */
class Main extends \Magento\Backend\Block\Widget\Form\Generic implements \Magento\Backend\Block\Widget\Tab\TabInterface
{
    /**
     * @var \Magento\Store\Model\System\Store
     */
    protected $_systemStore;
 
    /**
     * @var \Magento\Cms\Model\Wysiwyg\Config
     */
    protected $_wysiwygConfig;
 
    /**
     * @var \Sugarcode\Test\Model\Status
     */
    protected $_status;
 
    /**
     * @param \Magento\Backend\Block\Template\Context $context
     * @param \Magento\Framework\Registry $registry
     * @param \Magento\Framework\Data\FormFactory $formFactory
     * @param \Magento\Store\Model\System\Store $systemStore
     * @param array $data
     */
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,
        \Magento\Framework\Registry $registry,
        \Magento\Framework\Data\FormFactory $formFactory,
        \Magento\Store\Model\System\Store $systemStore,
        \Magento\Cms\Model\Wysiwyg\Config $wysiwygConfig,
        \Sugarcode\Test\Model\Status $status,
        array $data = []
    ) {
        $this->_systemStore = $systemStore;
        $this->_wysiwygConfig = $wysiwygConfig;
        $this->_status = $status;
        parent::__construct($context, $registry, $formFactory, $data);
    }
 
    /**
     * Prepare form
     *
     * @return $this
     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
     */
    protected function _prepareForm()
    {
        /* @var $model \SR\Weblog\Model\BlogPosts */
 
        $model = $this->_coreRegistry->registry('lists');
 
        $isElementDisabled = false;
 
        /** @var \Magento\Framework\Data\Form $form */
        $form = $this->_formFactory->create();
 
        $form->setHtmlIdPrefix('page_');
 
        $fieldset = $form->addFieldset('base_fieldset', ['legend' => __('Information')]);
 
        if ($model->getId()) {
            $fieldset->addField('id', 'hidden', ['name' => 'id']);
        }
 
 
        $fieldset->addField(
            'title',
            'text',
            [
                'name' => 'title',
                'label' => __('Title'),
                'title' => __('Title'),
                'required' => true,
                'disabled' => $isElementDisabled,
                'value' =>'abc'
            ]
        );
 
 
 
 
        if (!$model->getId()) {
            $model->setData('status', $isElementDisabled ? '0' : '1');
        }
 
        $fieldset->addField(
            'status',
            'select',
            [
                'label' => __('Status'),
                'title' => __('Status'),
                'name' => 'status',
                'required' => true,
                'options' => $this->_status->getOptionArray(),
                'disabled' => $isElementDisabled
            ]
        );
        $fieldset->addField(
            'short_summary',
            'editor',
            [
                'name' => 'short_summary',
                'label' => __('Summary'),
                'title' => __('Summary'),
                'style' => 'height:36em',
                'required' => true,
                'config' => $this->_wysiwygConfig->getConfig()
            ]
        );
 
 
 
 
        $dateFormat = $this->_localeDate->getDateFormat(
            \IntlDateFormatter::SHORT
        );
 
        /* $fieldset->addField(
            'created_at',
            'date',
            [
                'name' => 'created_at',
                'label' => __('Created Date'),
                'date_format' => $dateFormat,
                'disabled' => $isElementDisabled,
                'class' => 'validate-date validate-date-range date-range-custom_theme-from'
            ]
        ); */
 
        $form->setValues($model->getData());
        $this->setForm($form);
 
        return parent::_prepareForm();
    }
 
    /**
     * Prepare label for tab
     *
     * @return \Magento\Framework\Phrase
     */
    public function getTabLabel()
    {
        return __('Information');
    }
 
    /**
     * Prepare title for tab
     *
     * @return \Magento\Framework\Phrase
     */
    public function getTabTitle()
    {
        return __('Information');
    }
 
    /**
     * {@inheritdoc}
     */
    public function canShowTab()
    {
        return true;
    }
 
    /**
     * {@inheritdoc}
     */
    public function isHidden()
    {
        return false;
    }
 
    /**
     * Check permission for passed action
     *
     * @param string $resourceId
     * @return bool
     */
    protected function _isAllowedAction($resourceId)
    {
        return $this->_authorization->isAllowed($resourceId);
    }
}
if you dont wants tabs then follow below code
 
app\code\Sugarcode\Test\view\adminhtml\layout\test_lists_details.xml
 
<?xml version="1.0"?>
<!--
/**
 * Copyright © 2015 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
    <head>
        <css src="jquery/fileUploader/css/jquery.fileupload-ui.css"/>
    </head>
    <update handle="editor"/>
    <body>
        <referenceContainer name="content">
            <block class="Sugarcode\Test\Block\Adminhtml\Lists\Details" name="details_block_edit"/>
        </referenceContainer>
    </body>
</page>
app\code\Sugarcode\Test\Controller\Adminhtml\Lists\Details.php
 
<?php
 
namespace Sugarcode\Test\Controller\Adminhtml\Lists;
 
use Magento\Backend\App\Action;
 
class Details extends \Magento\Backend\App\Action
{
    /**
     * Core registry
     *
     * @var \Magento\Framework\Registry
     */
    protected $_coreRegistry = null;
 
    /**
     * @var \Magento\Framework\View\Result\PageFactory
     */
    protected $resultPageFactory;
 
    /**
     * @param Action\Context $context
     * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
     * @param \Magento\Framework\Registry $registry
     */
    public function __construct(
        Action\Context $context,
        \Magento\Framework\View\Result\PageFactory $resultPageFactory,
        \Magento\Framework\Registry $registry
    ) {
        $this->resultPageFactory = $resultPageFactory;
        $this->_coreRegistry = $registry;
        parent::__construct($context);
    }
 
    /**
     * {@inheritdoc}
     */
    protected function _isAllowed()
    {
        return true;
    }
 
    /**
     * Init actions
     *
     * @return \Magento\Backend\Model\View\Result\Page
     */
    protected function _initAction()
    {
        // load layout, set active menu and breadcrumbs
        /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
        $resultPage = $this->resultPageFactory->create();
        $resultPage->setActiveMenu('Sugarcode_Test::test')
            ->addBreadcrumb(__('Lists'), __('Lists'))
            ->addBreadcrumb(__('Manage Info'), __('Manage Info'));
        return $resultPage;
    }
 
    /**
     * Edit Blog Post
     *
     * @return \Magento\Backend\Model\View\Result\Page|\Magento\Backend\Model\View\Result\Redirect
     * @SuppressWarnings(PHPMD.NPathComplexity)
     */
    public function execute()
    {
        // 1. Get ID and create model
        $id = $this->getRequest()->getParam('id');
        $model = $this->_objectManager->create('Sugarcode\Test\Model\Test');
 
        // 2. Initial checking
        if ($id) {
            $model->load($id);
            if (!$model->getId()) {
                $this->messageManager->addError(__('This info no longer exists.'));
                /** \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
                $resultRedirect = $this->resultRedirectFactory->create();
 
                return $resultRedirect->setPath('*/*/');
            }
        }
 
        // 3. Set entered data if was error when we do save
        $data = $this->_objectManager->get('Magento\Backend\Model\Session')->getFormData(true);
        if (!empty($data)) {
            $model->setData($data);
        }
 
        // 4. Register model to use later in blocks
        $this->_coreRegistry->register('lists', $model);
 
        // 5. Build edit form
        /** @var \Magento\Backend\Model\View\Result\Page $resultPage */
        $resultPage = $this->_initAction();
        $resultPage->addBreadcrumb(
            $id ? __('Edit Info') : __('New Info'),
            $id ? __('Edit info') : __('New Info')
        );
        $resultPage->getConfig()->getTitle()->prepend(__('Info'));
        $resultPage->getConfig()->getTitle()
            ->prepend($model->getId() ? $model->getTitle() : __('New Info'));
 
        return $resultPage;
    }
}
now in blocks app\code\Sugarcode\Test\Block\Adminhtml\Lists\Details.php
 
<?php
/**
 * Copyright © 2015 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Sugarcode\Test\Block\Adminhtml\Lists;
 
/**
 * CMS block edit form container
 */
class Details extends \Magento\Backend\Block\Widget\Form\Container
{
    /**
     * Core registry
     *
     * @var \Magento\Framework\Registry
     */
    protected $_coreRegistry = null;
 
    /**
     * @param \Magento\Backend\Block\Widget\Context $context
     * @param \Magento\Framework\Registry $registry
     * @param array $data
     */
    public function __construct(
        \Magento\Backend\Block\Widget\Context $context,
        \Magento\Framework\Registry $registry,
        array $data = []
    ) {
        $this->_coreRegistry = $registry;
        parent::__construct($context, $data);
    }
 
    /**
     * @return void
     */
    protected function _construct()
    {
          $this->_objectId = 'id';
        $this->_blockGroup = 'Sugarcode_Test';
        $this->_controller = 'adminhtml_lists';
        $this->_mode = 'details';
 
        parent::_construct();
 
        $this->buttonList->update('save', 'label', __('Save Details'));
        $this->buttonList->update('delete', 'label', __('Delete Details'));
 
        $this->buttonList->add(
            'saveandcontinue',
            [
                'label' => __('Save and Continue Edit'),
                'class' => 'save',
                'data_attribute' => [
                    'mage-init' => ['button' => ['event' => 'saveAndContinueEdit', 'target' => '#edit_form']],
                ]
            ],
            -100
        );
 
        $this->_formScripts[] = "
            function toggleEditor() {
                if (tinyMCE.getInstanceById('block_content') == null) {
                    tinyMCE.execCommand('mceAddControl', false, 'block_content');
                } else {
                    tinyMCE.execCommand('mceRemoveControl', false, 'block_content');
                }
            }
        ";
    }
 
    /**
     * Get edit form container header text
     *
     * @return \Magento\Framework\Phrase
     */
    public function getHeaderText()
    {
        if ($this->_coreRegistry->registry('lists')->getId()) {
            return __("Edit Details '%1'", $this->escapeHtml($this->_coreRegistry->registry('lists')->getTitle()));
        } else {
            return __('New Details');
        }
    }
}
in above file imp code is
 
$this->_mode = 'details';
 
and finally app\code\Sugarcode\Test\Block\Adminhtml\Lists\Details\Form.php
 
<?php
/**
 * Copyright © 2015 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Sugarcode\Test\Block\Adminhtml\Lists\Details;
 
/**
 * Adminhtml cms block edit form
 */
class Form extends \Magento\Backend\Block\Widget\Form\Generic
{
    /**
     * @var \Magento\Cms\Model\Wysiwyg\Config
     */
    protected $_wysiwygConfig;
 
 
    /**
     * @var \Sugarcode\Test\Model\Status
     */
    protected $_status;
 
 
    /**
     * @param \Magento\Backend\Block\Template\Context $context
     * @param \Magento\Framework\Registry $registry
     * @param \Magento\Framework\Data\FormFactory $formFactory
     * @param \Magento\Cms\Model\Wysiwyg\Config $wysiwygConfig
     * @param \Magento\Store\Model\System\Store $systemStore
     * @param array $data
     */
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,
        \Magento\Framework\Registry $registry,
        \Magento\Framework\Data\FormFactory $formFactory,
        \Magento\Cms\Model\Wysiwyg\Config $wysiwygConfig,
        \Sugarcode\Test\Model\Status $status,
        array $data = []
    ) {
        $this->_wysiwygConfig = $wysiwygConfig;
        $this->_status = $status;
        parent::__construct($context, $registry, $formFactory, $data);
    }
 
    /**
     * Init form
     *
     * @return void
     */
    protected function _construct()
    {
        parent::_construct();
        $this->setId('block_form');
        $this->setTitle(__('Block Information'));
    }
 
    /**
     * Prepare form
     *
     * @return $this
     */
    protected function _prepareForm()
    {
        $model = $this->_coreRegistry->registry('lists');
 
        /** @var \Magento\Framework\Data\Form $form */
        $form = $this->_formFactory->create(
            ['data' => ['id' => 'edit_form', 'action' => $this->getData('action'), 'method' => 'post']]
        );
 
        $form->setHtmlIdPrefix('block_');
 
        $fieldset = $form->addFieldset(
            'base_fieldset',
            ['legend' => __('General Information'), 'class' => 'fieldset-wide']
        );
 
        if ($model->getId()) {
            $fieldset->addField('id', 'hidden', ['name' => 'id']);
        }
 
        $fieldset->addField(
            'title',
            'text',
            ['name' => 'title', 'label' => __('Block Title'), 'title' => __('Block Title'), 'required' => true]
        );
 
 
 
        $fieldset->addField(
            'status',
            'select',
            [
                'label' => __('Status'),
                'title' => __('Status'),
                'name' => 'status',
                'required' => true,
                'options' => $this->_status->getOptionArray(),
            ]
        );
        if (!$model->getId()) {
            $model->setData('status', '1');
        }
 
       $fieldset->addField(
            'short_summary',
            'editor',
            [
                'name' => 'short_summary',
                'label' => __('Summary'),
                'title' => __('Summary'),
                'style' => 'height:36em',
                'required' => true,
                'config' => $this->_wysiwygConfig->getConfig()
            ]
        );
 
 
        $form->setValues($model->getData());
        $form->setUseContainer(true);
        $this->setForm($form);
 
        return parent::_prepareForm();
    }
}
above are the two ways of edit for ,
edit is for edit a content with tab and

details is for edit a content without tabs 

then i edited app\code\Sugarcode\Test\view\adminhtml\layout\test_lists_edit.xml

 

<?xml version="1.0"?>

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-2columns-left" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">

    <head>

        <css src="jquery/fileUploader/css/jquery.fileupload-ui.css"/>

    </head>

    <update handle="editor"/>

    <body>

        <referenceContainer name="left">

            <block class="Sugarcode\Test\Block\Adminhtml\Lists\Edit\Tabs" name="list_post_edit_tabs">

                <block class="Sugarcode\Test\Block\Adminhtml\Lists\Edit\Tab\Main" name="list_post_edit_tab_main"/>

                <action method="addTab">

                    <argument name="name" xsi:type="string">main_section</argument>

                    <argument name="block" xsi:type="string">list_post_edit_tab_main</argument>

                </action>

            </block>

        </referenceContainer>

        <referenceContainer name="content">

            <block class="Sugarcode\Test\Block\Adminhtml\Lists\Edit\Tab\Gridlists" name="adminhtml.tests.lists.tabs.grid.js" template="Sugarcode_Test::lists/tabs_grid_js.phtml"/>

            <block class="Sugarcode\Test\Block\Adminhtml\Lists\Edit" name="list_post_edit"/>

        </referenceContainer>

    </body>

</page>

just i added one more block in content xml that is

 

<block class="Sugarcode\Test\Block\Adminhtml\Lists\Edit\Tab\Gridlists" name="adminhtml.tests.lists.tabs.grid.js" template="Sugarcode_Test::lists/tabs_grid_js.phtml"/>

then i added Gridlists.php block \app\code\Sugarcode\Test\Block\Adminhtml\Lists\Edit\Tab\Gridlists.php

 

<?php

/**

 * Copyright © 2015 Magento. All rights reserved.

 * See COPYING.txt for license details.

 */

namespace Sugarcode\Test\Block\Adminhtml\Lists\Edit\Tab;

 

/**

 *

 * @SuppressWarnings(PHPMD.LongVariable)

 */

class Gridlists extends \Magento\Backend\Block\Widget\Tabs

{

    /**

     * User model factory

     *

     * @var \Magento\User\Model\Resource\User\CollectionFactory

     */

 

 

    protected $_testFactory; 

 

    protected $_objectManager;

 

    /**

     * @param \Magento\Backend\Block\Template\Context $context

     * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder

     * @param \Magento\Backend\Model\Auth\Session $authSession

     * @param \Magento\User\Model\Resource\User\CollectionFactory $userCollectionFactory

     * @param array $data

     */

    public function __construct(

        \Magento\Framework\ObjectManagerInterface $objectManager,

        \Magento\Backend\Block\Template\Context $context,

        \Magento\Framework\Json\EncoderInterface $jsonEncoder,

        \Sugarcode\Test\Model\TestFactory $testFactory,

        \Magento\Backend\Model\Auth\Session $authSession,

        \Sugarcode\Test\Model\Resource\Test\CollectionFactory $userCollectionFactory,

        array $data = []

    ) {

        // _userCollectionFactory is used in parent::__construct

        $this->_testFactory = $testFactory;

        $this->_objectManager = $objectManager;

        $this->_jsonEncoder = $jsonEncoder;

        parent::__construct($context, $jsonEncoder, $authSession, $data);

    }

 

    /**

     * Class constructor

     *

     * @return void

     */

    protected function _construct()

    {

        parent::_construct();

        $id = $this->getRequest()->getParam('id', false);

       // $this->setTemplate('lists/lists.phtml')->assign('alists', [1]);

      //$this->assign('alists', $this->getAlists())->assign('id', $id);

 

    }

 

    /**

     * @return $this

     */

    protected function _prepareLayout()

    {

        $this->setChild(

            'listsGrid',

            $this->getLayout()->createBlock('Sugarcode\Test\Block\Adminhtml\Lists\Edit\Tab\Gridtabs', 'listsTabsGrid')

        );

        return parent::_prepareLayout();

    }

 

    /**

     * @return string

     */

    public function getGridHtml()

    {

        return $this->getChildHtml('listsGrid');

    }

 

}

same way i created a grid for this app\code\Sugarcode\Test\Block\Adminhtml\Lists\Edit\Tab\Gridtabs.php

 

<?php

 

namespace Sugarcode\Test\Block\Adminhtml\Lists\Edit\Tab;

 

 

use Magento\Backend\Block\Widget\Grid\Column;

 

 

class Gridtabs  extends \Magento\Backend\Block\Widget\Grid\Extended

{/**

     * @var \Magento\Framework\Module\Manager

     */

    protected $moduleManager;

 

    protected $_testFactory; 

 

    protected $_objectManager;

 

    protected $_status;

 

    /**

     * @var \Magento\Framework\Json\EncoderInterface

     */

    protected $_jsonEncoder;

 

    //protected $_template = 'lists/tabs_grid_js.phtml';

 

    public function __construct(

        \Magento\Framework\ObjectManagerInterface $objectManager,

        \Magento\Backend\Block\Template\Context $context,

        \Magento\Backend\Helper\Data $backendHelper,

        \Sugarcode\Test\Model\TestFactory $testFactory,

        \Sugarcode\Test\Model\Status $status,

        \Magento\Framework\Json\EncoderInterface $jsonEncoder,

        \Magento\Framework\Module\Manager $moduleManager,

        array $data = []

    ) {

        $this->_testFactory = $testFactory;

        $this->_status = $status;

        $this->moduleManager = $moduleManager;

        $this->_objectManager = $objectManager;

        $this->_jsonEncoder = $jsonEncoder;

        parent::__construct($context, $backendHelper, $data);

    }

 

    /**

     * @return void

     */

    protected function _construct()

    {

        parent::_construct();

        $this->setId('listsGrid');

        $this->setDefaultSort('id');

        $this->setDefaultDir('DESC');

        $this->setSaveParametersInSession(true);

        $this->setUseAjax(true);

        $this->setVarNameFilter('lists_filter');

    }

 

    /**

     * @return $this

     */

    protected function _prepareCollection()

    {

        $collection = $this->_testFactory->create()->getCollection();

        $this->setCollection($collection);

 

        parent::_prepareCollection();

        return $this;

    }

 

    protected function _addColumnFilterToCollection($column)

    {

 

    if ($column->getId() == 'in_lists_gridtabs') {

            $inlistsIds = $this->getAlists();

 

            if (empty($inlistsIds)) {

                $inlistsIds = 0;

            }

            if ($column->getFilter()->getValue()) {

                $this->getCollection()->addFieldToFilter('id', ['in' => $inlistsIds]);

            } else {

                if ($inlistsIds) {

                    $this->getCollection()->addFieldToFilter('id', ['nin' => $inlistsIds]);

                }

            }

        } else {

            parent::_addColumnFilterToCollection($column);

        }

        return $this;

    }

    public function getAlists($json = false)

    {

 

         //       return [1];

        $id=$this->getRequest()->getParam('id');

        $collection = $this->_testFactory->create()->setId($id);

        $listso = $this->_objectManager->create('Sugarcode\Test\Model\Test')->load($id);

        $collection=unserialize($listso->getInListsGrid());

 

        if (sizeof($collection) > 0) {

            if ($json) {

                $jsonLists = [];

                foreach ($collection as $usrid) {

                    $jsonLists[$usrid] = 0;

                }

                return $this->_jsonEncoder->encode((object)$jsonLists);

            } else {

                return array_values($collection);

            }

        } else {

            if ($json) {

                return '{}';

            } else {

                return [];

            }

        }

 

    }  

 

 

    public function isReadonly()

    {

        return false;

    }

 

    /**

     * @return $this

     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)

     */

    protected function _prepareColumns()

    {

         $this->addColumn(

            'in_lists_gridtabs',

            [

                'header_css_class' => 'a-center',

                'type' => 'checkbox',

                'name' => 'in_lists_gridtabs',

                'values' => $this->getAlists(),

                'align' => 'center',

                'index' => 'id'

            ]

        );

         $this->addColumn(

            'lists_id',

            [

                'header' => __('ID'),

                'type' => 'number',

                'index' => 'id',

                'header_css_class' => 'col-id',

                'column_css_class' => 'col-id',

                'name'=>'lists_id'

            ]

        );  

        $this->addColumn(

            'lists_title',

            [

                'header' => __('Title'),

                'index' => 'title',

                'class' => 'xxx',

                'name'=>'lists_title'

            ]

        );

 

        $this->addColumn(

            'lists_created_at',

            [

                'header' => __('Created Date'),

                'index' => 'created_at',

                'name'=>'lists_created_at'

            ]

        );

 

 

        $this->addColumn(

            'lists_status',

            [

                'header' => __('Status'),

                'index' => 'status',

                'type' => 'options',

                'name'=>'lists_status',

                'options' => $this->_status->getOptionArray()

            ]

        );

 

 

        return parent::_prepareColumns();

    }

 

 

    /**

     * @return string

     */

    public function getGridUrl()

    {

        $id = $this->getRequest()->getParam('id');

        return $this->getUrl('*/*/gridtabs', ['id' => $id]);

    }

 

 

    /**

     * Prepare label for tab

     *

     * @return \Magento\Framework\Phrase

     */

    public function getTabLabel()

    {

        return __('Test Grid');

    }

 

    /**

     * Prepare title for tab

     *

     * @return \Magento\Framework\Phrase

     */

    public function getTabTitle()

    {

        return __('Test Grid');

    }

 

    /**

     * {@inheritdoc}

     */

    public function canShowTab()

    {

        return true;

    }

 

    /**

     * {@inheritdoc}

     */

    public function isHidden()

    {

        return false;

    }

 

    /**

     * Check permission for passed action

     *

     * @param string $resourceId

     * @return bool

     */

    protected function _isAllowedAction($resourceId)

    {

        return $this->_authorization->isAllowed($resourceId);

    }

}

you need to add two hidden filed in form for that you need to add in form so edit Main.php

 

app\code\Sugarcode\Test\Block\Adminhtml\Lists\Edit\Tab\Main.php :-

 

protected function _prepareForm(){ .

.

.

.

.

old code where you add fileds in last add below code

 

$fieldset->addField('in_lists_grid', 'hidden', ['name' => 'in_lists_grid', 'id' => 'in_lists_gridz']);

 

$fieldset->addField('in_lists_grid_old', 'hidden', ['name' => 'in_lists_grid_old']);

for check box action you need to create js so i created app\code\Sugarcode\Test\view\adminhtml\templates\lists\tabs_grid_js.phtml

 

<?php

/**

 * Copyright © 2015 Magento. All rights reserved.

 * See COPYING.txt for license details.

 */

 

// @codingStandardsIgnoreFile

 

?>

<script>

require([

    'jquery',

    'mage/adminhtml/grid',

    'prototype'

], function(jQuery){

 

<!--

<?php $myBlock = $block->getLayout()->getBlock('listsTabsGrid'); ?>

<?php if (is_object($myBlock) && $myBlock->getJsObjectName()): ?>

    var checkBoxes = $H(<?php echo $myBlock->getAlists(true) ?>);

    var warning = false;

    if (checkBoxes.size() > 0) {

        warning = true;

    }

    jQuery('#in_lists_grid').val(checkBoxes.toQueryString());

 

    function registerlistsTabs(grid, element, checked)

    {

        if (checked) {

            checkBoxes.set(element.value, 0);

        } else {

            checkBoxes.unset(element.value);

        }

        $('in_lists_grid').value = checkBoxes.toQueryString();

        grid.reloadParams = {'in_lists_grid[]':checkBoxes.keys()};

    }

 

    function listsTabsRowClick(grid, event)

    {

        var trElement = Event.findElement(event, 'tr');

        var isInput   = Event.element(event).tagName == 'INPUT';

        if (trElement) {

            var checkbox = Element.getElementsBySelector(trElement, 'input');

            if(checkbox[0]){

                var checked = isInput ? !checkbox[0].checked : checkbox[0].checked;

                if (checked) {

                    if ( confirm("<?php echo __('Warning!\r\nThis action will remove those lists from already assigned list\r\nAre you sure?') ?>") ) {

                        checkbox[0].checked = false;

                        checkBoxes.unset(checkbox[0].value);

                        varienElementMethods.setHasChanges(checkbox[0]);

                    } else {

                        checkbox[0].checked = true;

                    }

                } else {

                    checkbox[0].checked = true;

                    checkBoxes.set(checkbox[0].value, true);

                }

 

                $('in_lists_grid').value = checkBoxes.toQueryString();

                grid.reloadParams = {'in_lists_grid[]':checkBoxes.keys()};

            }

        }

    }

 

    function listsTabsRowInit(grid, row)

    {

        var checkbox = $(row).getElementsByClassName('checkbox')[0];

        if (checkbox) {

            if (checkbox.checked) {

                checkBoxes.set(checkbox.value, checkbox.checked);

            } else {

                checkBoxes.unset(checkbox.value);

            }

 

            $('in_lists_grid').value = checkBoxes.toQueryString();

            grid.reloadParams = {'in_lists_grid[]':checkBoxes.keys()};

        }

    }

 

    function massSelectUsers(allCheckbox)

    {

        if (!allCheckbox.checked && checkBoxes.size() > 0) {

            if (!confirm("<?php echo __('Warning!\r\nThis action will remove those lists from already assigned list\r\nAre you sure?') ?>") ) {

                allCheckbox.checked = false;

                return false;

            }

        }

        <?php echo $myBlock->getJsObjectName() ?>.rows.each(function(row)

        {

            $(row).getElementsByClassName('checkbox')[0].checked = allCheckbox.checked;

            listsTabsRowInit(<?php echo $myBlock->getJsObjectName() ?>, row);

        });

    }

    Event.observe(window, "load", function(){

        <?php echo $myBlock->getJsObjectName() ?>.rowClickCallback = listsTabsRowClick;

        <?php echo $myBlock->getJsObjectName() ?>.initRowCallback = listsTabsRowInit;

        <?php echo $myBlock->getJsObjectName() ?>.checkboxCheckCallback = registerlistsTabs;

        <?php echo $myBlock->getJsObjectName() ?>.checkCheckboxes = massSelectUsers;

        <?php echo $myBlock->getJsObjectName() ?>.rows.each(function(row){listsTabsRowInit(<?php echo $myBlock->getJsObjectName() ?>, row)});

        $('in_lists_grid_old').value = $('in_lists_grid').value;

    });

<?php endif; ?>

//-->

 

});

</script>

now grid is ready in side edit tab if you need to serach for that then u need to add two new files that is

 

app\code\Sugarcode\Test\view\adminhtml\layout\test_lists_gridtabs.xml

 

<?xml version="1.0"?>

<!--

/**

 * Copyright © 2015 Magento. All rights reserved.

 * See COPYING.txt for license details.

 */

-->

<layout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/layout_generic.xsd">

    <update handle="formkey"/>

    <container name="root" label="Root">

        <block class="Sugarcode\Test\Block\Adminhtml\Lists\Edit\Tab\Gridtabs" name="post_tabs_test_grid_content"/>

    </container>

</layout>

and controller app\code\Sugarcode\Test\Controller\Adminhtml\Lists\Gridtabs.php

 

class Gridtabs extends  \Magento\Backend\App\Action

{

    /**

     * Queue list Ajax action

     *

     * @return void

     */

    public function execute()

    {

       $this->_view->loadLayout(false);

        $this->_view->getLayout()->getMessagesBlock()->setMessages($this->messageManager->getMessages(true));

        $this->_view->renderLayout();

    }

}

 

 

80 Bình luận

  1. Harshita Gaur nói:

    Book 8510064220 Chanakyapuri Escorts Delhi romantic relationships -8510064220, My Friend are Sexy Independent College Call Girls Chanakyapuri Delhi available http://www.escortinchanakyapuri.com/ Delhi Call Girls ||@|| New Delhi Call Girls ||@|| Delhi Call Girls ||@|| Escorts In Five Star Hotel Call Girls ||@|| Delhi Call Girls ||@|| Delhi Call Girls ||@|| Real Mobile Number With Photos Call Girls ||@|| Call Us Delhi Call Girls ||@|| Malviya Nagar Call Girls ||@|| Aerocity Call Girls ||@|| Saket Call Girls ||@|| Mahipalpur Call Girls ||@|| Dwarka Call Girls ||@|| Preet Vihar Call Girls ||@|| Vivek Vihar Call Girls ||@||

  2. Mobile Phone Repairing Course nói:

    Hey what a brilliant post I have come across and I fit in with your conclusions and will eagerly look forward to your next updates. :) LED Tv Repairing Institute in Delhi Mobile Phone Repairing Course Mobile Phone Repair Training Institutes Mobile Repairing Institute in Delhi

  3. Packers and Movers Indore nói:

    Manish Packers and Movers Pvt Ltd is a leading movers and packers in Indore. With specialist in packing and moving industry, we offer a comprehensive and cost-effective solution to all your relocation requirement. We are offering a wide range of relocation services in almost all the major cities and town of India. Packers and Movers Indore Movers and Packers Indore Best Packers and Movers in India Indore Packers and Movers

  4. Stark nói:

    Congratulation for the great post. Those who come to read your article will find lots of helpful and informative tips. www.chagapilz-tee.de/home/

  5. Mumbai Escorts nói:

    We Deal In High Class Mumbai Models And Beautiful Mumbai Call Girls. Our Service Charge Is Low. We Provide Mumbai Escorts Service At Your Home Or In Star Hotels. We Are Available To Serve You 24 X 7. Contact Us For Booking Ph- 09987215552 Visit- http://www.escortagencyinmumbai.com/mumbai-escorts/ I am Priya Singh with love for all men. I am an independent model in Mumbai. You can come and test me anytime. You know, I love to be your companion. Are you too much stressed throughout the day? Is your head striking with pain? I can give you a good Mumbai Escorts Service for your recovery. You can call me anytime. Being independent I am available 24/7 for your service. Beautiful Mumbai Escorts: Get A Zeal Of Unique Love Making Are you looking for a lady with beauty? Do you want to keep her by your side? Ms. Priya Singh will give you that pleasure. She is one among the Mumbai Escorts with the zeal to serve men. She served people with all ages. Even, men from different economic condition is not a problem to her. You can get the sex service in Mumbai area. You can get all types of entertainment in affordable rate. The packages are available online with details. You can ask the Mumbai Escorts for the contact details. They can move out with you to a corporate party. There are scope for meeting in hotel. You get full enjoyment with the beautiful escort in Mumbai. If you want to check their vital statistics and figure, enough opportunity is there in the escort gallery. Version Of Mumbai Escorts I am Priya Singh, age 24 years. I have an optimum height of 5’6”. So, males with medium and low height can reach me. Many of my clients prefers me due to my height. Some of them don’t like the Mumbai escorts with too much height. They look for an Indian women height. I am lucky to fit their as per their expectation. You can get maximum comfort within my lap. I can also give you some joyous moment. Do you have any stress in your life? Is the tension of office haunting you all day long? A short and sensual message can help. I am one of the Mumbai Escorts with the skill of body and head massage. You can come to me for this service even. Payment Of Mumbai Escorts Some of you are too much tensed about the payment structure. Don’t worry at all. We have made the package for people with all economic background. Unlike other agencies, we don’t concentrate on only rich people. Rather, our Mumbai Escorts are open to all types of people. Our escort agency have packages that can suite your budget. You must give an advance payment before availing the service. But, we are trustworthy in this trade. You will definitely get your service once we have received our fees. if you wish You can check the rates of other escort agencies. finally You will find our rates are more in your budget. We can also reduce your rate once you become our regular customer.Call Me- +91 9987215552

  6. rusli nói:

    tes saja lah htlm code undangan pernikahan undangan pernikahan unik undangan pernikahan unik ini cuma pake ling http://www.undangancinta.com bb code [url=http://www.undangancinta.com]undangan pernikahan[/url] [url=http://www.undangancinta.com]undangan pernikahan simple[/url] [url=http://www.undangancinta.com]undangan pernikahan unik[/url] ࢠ̊

  7. Shruti Arora nói:

    We are available as call girl in Delhi with mobile number and photo. Find us call girl near me for everyday. Delhi Call girl mobile number with photo Delhi call girl Delhi call girl number Escort service in Delhi Mahipalpur Escorts Noida Escorts

  8. Delhi Escorts nói:

    Our Delhi Escorts high profile girls will give you the best pleasure on the bed.Please visit followings links for more details. New Delhi Escorts Saket Escorts Dwarka Escorts Aerocity Escorts Mahipalpur Escorts Cannaught Place Escorts Gurgaon Escorts Noida Escorts delhi call girl Independent Delhi Escorts

  9. priyasingh81 nói:

    My Name Is Priya Singh. I Am An Independent Mumbai Escort Girl. I Run My Own Mumbai Escorts. My Price Is Low And Service Is Super. Contact Me For Independent Mumbai Escorts Service. Avail My Private Service At Your Own Place Or In Hotel. I Am Available 24 X 7. Contact Me +91 9987215552. Beautiful Mumbai Escorts: Get A Zeal Of Unique Love Making Are you looking for a lady with beauty? Do you want to keep her by your side? Ms. Priya Singh will give you that pleasure. She is one among the .Mumbai Escorts with the zeal to serve men. She served people with all ages. Even, men from different economic condition is not a problem to her. You can get the sex service in Mumbai area. You can get all types of entertainment in affordable rate. The packages are available online with details. You can ask the Mumbai escorts for the contact details. They can move out with you to a corporate party. There are scope for meeting in hotel. You get full enjoyment with the beautiful escort in Mumbai. If you want to check their vital statistics and figure, enough opportunity is there in the escort gallery. Version Of Mumbai Escorts I am Priya Singh, age 24 years. I have an optimum height of 5’6”. So, males with medium and low height can reach me. Many of my clients prefer me due to my height. Some of them don’t like the .Mumbai Escortswith too much height. They look for an Indian women height. I am lucky to fit their as per their expectation. You can get maximum comfort within my lap. I can also give you some joyous moment. Do you have any stress in your life? Is the tension of office haunting you all day long? A short and sensual message can help. I am one of the Mumbai escorts with the skill of body and head massage. You can come to me for this service even. Payment Of Mumbai Escorts Some of you are too much tensed about the payment structure. Don’t worry at all. We have made the package for people with all economic background. Unlike other agencies, we don’t concentrate on only rich people. Rather, our .Mumbai Escorts are open to all types of people. Our escort agency have packages that can suite your budget. You must give an advance payment before availing the service. But, we are trustworthy in this trade. You will definitely get your service once we have received our fees. if you wish You can check the rates of other escort agencies. finally You will find our rates are more in your budget. We can also reduce your rate once you become our regular customer. Contact +91 9987215552. Visit- http://www.escortagencyinmumbai.com/mumbai-escorts/

  10. priyasingh81 nói:

    My Name Is Priya Singh. I Am An Independent Mumbai Escort Girl. I Run My Own Mumbai Escorts. My Price Is Low And Service Is Super. Contact Me For Independent Mumbai Escorts Service. Avail My Private Service At Your Own Place Or In Hotel. I Am Available 24 X 7. Contact Me +91 9987215552. Beautiful Mumbai Escorts: Get A Zeal Of Unique Love Making Are you looking for a lady with beauty? Do you want to keep her by your side? Ms. Priya Singh will give you that pleasure. She is one among the .Mumbai Escorts with the zeal to serve men. She served people with all ages. Even, men from different economic condition is not a problem to her. You can get the sex service in Mumbai area. You can get all types of entertainment in affordable rate. The packages are available online with details. You can ask the Mumbai escorts for the contact details. They can move out with you to a corporate party. There are scope for meeting in hotel. You get full enjoyment with the beautiful escort in Mumbai. If you want to check their vital statistics and figure, enough opportunity is there in the escort gallery. Version Of Mumbai Escorts I am Priya Singh, age 24 years. I have an optimum height of 5’6”. So, males with medium and low height can reach me. Many of my clients prefer me due to my height. Some of them don’t like the .Mumbai Escortswith too much height. They look for an Indian women height. I am lucky to fit their as per their expectation. You can get maximum comfort within my lap. I can also give you some joyous moment. Do you have any stress in your life? Is the tension of office haunting you all day long? A short and sensual message can help. I am one of the Mumbai escorts with the skill of body and head massage. You can come to me for this service even. Payment Of Mumbai Escorts Some of you are too much tensed about the payment structure. Don’t worry at all. We have made the package for people with all economic background. Unlike other agencies, we don’t concentrate on only rich people. Rather, our .Mumbai Escorts are open to all types of people. Our escort agency have packages that can suite your budget. You must give an advance payment before availing the service. But, we are trustworthy in this trade. You will definitely get your service once we have received our fees. if you wish You can check the rates of other escort agencies. finally You will find our rates are more in your budget. We can also reduce your rate once you become our regular customer. Contact +91 9987215552. Visit- http://www.escortagencyinmumbai.com/mumbai-escorts/

  11. priyasingh81 nói:

    My Name Is Priya Singh. I Am An Independent Mumbai Escort Girl. I Run My Own Mumbai Escorts. My Price Is Low And Service Is Super. Contact Me For Independent Mumbai Escorts Service. Avail My Private Service At Your Own Place Or In Hotel. I Am Available 24 X 7. Contact Me +91 9987215552. Beautiful Mumbai Escorts: Get A Zeal Of Unique Love Making Are you looking for a lady with beauty? Do you want to keep her by your side? Ms. Priya Singh will give you that pleasure. She is one among the .Mumbai Escorts with the zeal to serve men. She served people with all ages. Even, men from different economic condition is not a problem to her. You can get the sex service in Mumbai area. You can get all types of entertainment in affordable rate. The packages are available online with details. You can ask the Mumbai escorts for the contact details. They can move out with you to a corporate party. There are scope for meeting in hotel. You get full enjoyment with the beautiful escort in Mumbai. If you want to check their vital statistics and figure, enough opportunity is there in the escort gallery. Version Of Mumbai Escorts I am Priya Singh, age 24 years. I have an optimum height of 5’6”. So, males with medium and low height can reach me. Many of my clients prefer me due to my height. Some of them don’t like the .Mumbai Escortswith too much height. They look for an Indian women height. I am lucky to fit their as per their expectation. You can get maximum comfort within my lap. I can also give you some joyous moment. Do you have any stress in your life? Is the tension of office haunting you all day long? A short and sensual message can help. I am one of the Mumbai escorts with the skill of body and head massage. You can come to me for this service even. Payment Of Mumbai Escorts Some of you are too much tensed about the payment structure. Don’t worry at all. We have made the package for people with all economic background. Unlike other agencies, we don’t concentrate on only rich people. Rather, our .Mumbai Escorts are open to all types of people. Our escort agency have packages that can suite your budget. You must give an advance payment before availing the service. But, we are trustworthy in this trade. You will definitely get your service once we have received our fees. if you wish You can check the rates of other escort agencies. finally You will find our rates are more in your budget. We can also reduce your rate once you become our regular customer. Contact +91 9987215552. Visit- http://www.escortagencyinmumbai.com/mumbai-escorts/

  12. priyasingh81 nói:

    My Name Is Priya Singh. I Am An Independent Mumbai Escort Girl. I Run My Own Mumbai Escorts. My Price Is Low And Service Is Super. Contact Me For Independent Mumbai Escorts Service. Avail My Private Service At Your Own Place Or In Hotel. I Am Available 24 X 7. Contact Me +91 9987215552. Beautiful Mumbai Escorts: Get A Zeal Of Unique Love Making Are you looking for a lady with beauty? Do you want to keep her by your side? Ms. Priya Singh will give you that pleasure. She is one among the .Mumbai Escorts with the zeal to serve men. She served people with all ages. Even, men from different economic condition is not a problem to her. You can get the sex service in Mumbai area. You can get all types of entertainment in affordable rate. The packages are available online with details. You can ask the Mumbai escorts for the contact details. They can move out with you to a corporate party. There are scope for meeting in hotel. You get full enjoyment with the beautiful escort in Mumbai. If you want to check their vital statistics and figure, enough opportunity is there in the escort gallery. Version Of Mumbai Escorts I am Priya Singh, age 24 years. I have an optimum height of 5’6”. So, males with medium and low height can reach me. Many of my clients prefer me due to my height. Some of them don’t like the .Mumbai Escortswith too much height. They look for an Indian women height. I am lucky to fit their as per their expectation. You can get maximum comfort within my lap. I can also give you some joyous moment. Do you have any stress in your life? Is the tension of office haunting you all day long? A short and sensual message can help. I am one of the Mumbai escorts with the skill of body and head massage. You can come to me for this service even. Payment Of Mumbai Escorts Some of you are too much tensed about the payment structure. Don’t worry at all. We have made the package for people with all economic background. Unlike other agencies, we don’t concentrate on only rich people. Rather, our .Mumbai Escorts are open to all types of people. Our escort agency have packages that can suite your budget. You must give an advance payment before availing the service. But, we are trustworthy in this trade. You will definitely get your service once we have received our fees. if you wish You can check the rates of other escort agencies. finally You will find our rates are more in your budget. We can also reduce your rate once you become our regular customer. Contact +91 9987215552. Visit- http://www.escortagencyinmumbai.com/mumbai-escorts/

  13. ritusharma71 nói:

    My Name Is Ritu Sharma. I Am An Independent Escort Girl. I Run My Own . Mumbai Escorts Service. Our Price Is Low And Service Is Super. Contact us For Independent Mumbai Escorts Service. Avail our Private Service At Your Own Place Or In Hotel. We are Available 24 X 7. Contact us +91 9OO4OO9481 or Visit My Website- http://www.escortservicemumbai.net/mumbai-escorts/ Mumbai Escorts +91- 9004009481 Are you an adult? Do you wish to have complete enjoyment? . Mumbai Escorts have that zeal. The pretty girls give all pleasure. No need to go to an agency in person. Some people are also very shy about hiring an escort. The online access to all the lovely girls can surprise you. No need to depend on anyone. You can operate the escorts with very pretty note. They too can come to you for a love making zeal. Folks can decide the location with the Mumbai escorts today. There are many hotels for night stay. The guest houses and apartments are present too. You can make everything beautiful with the charm. The trend they follow is latest. The clients do like their looks and attire. It is the time to have everything better. Nothing is possible without the Mumbai escorts. Passion with Mumbai Escorts The world is all about the love and passion. Do you get that love at home? Most of the people say no. Only the beautiful girls can give you the pleasure. Of course the young people can avail them anytime. It does not mean that elderly ones cannot. They are equally important for . Mumbai Escorts . The equal attention will be given to them. Additionally, there won’t be any parity among the clients. Their passion has city wide recognition. You just need to book them today. They are always ready to have your company. Like them, you will also become passionate. Your Girl Friend in Mumbai Escorts Are you missing your girlfriend? Is she far away from you? This is when you need a partner. No one will be better than the . Mumbai Escorts . Many middle aged men also lose their wives at a very young age. It is impossible for them to send the entire life without a partner. In this situation also, the pretty girls will be at your service. You can call them anytime you wish. The booking lines are open for everybody. Anyone can just have a look at the profiles today. Complete Love Making – Mumbai Escorts A group of folks are eager to have only sex. We have the categories for this escort service. They are dedicated for love making. They are also good in love making process. Foreplay is another trade where they are successful. The Mumbai escorts are happy to provide this service. The relaxation will be within their arms. The escorts are happy to help you always exactly the way you wish. The best deal is going to going to be yours. Folks are going to get the happiness and satisfaction. It is the time to explore the beauty. The moment will be joyous. The intense feeling is within. This is where you will get all relaxation. The love making is in air. The escorts will showcase their beauty. You just need to extract them. Contact Me +91 9OO4OO9481

  14. priya singh nói:

    We Deal In High Class Mumbai Models And Beautiful Mumbai Call Girls. Our Service Charge Is Low. We Provide Mumbai Escorts Service At Your Home Or In Star Hotels. We Are Available To Serve You 24 X 7. Contact Us For Booking Ph- 09987215552 I am Priya Singh with love for all men. I am an independent model in Mumbai. You can come and test me anytime. You know, I love to be your companion. Are you too much stressed throughout the day? Is your head striking with pain? I can give you a good Mumbai Escorts Service for your recovery. You can call me anytime. Being independent I am available 24/7 for your service. Beautiful Mumbai Escorts: Get A Zeal Of Unique Love Making Are you looking for a lady with beauty? Do you want to keep her by your side? Ms. Priya Singh will give you that pleasure. She is one among the Mumbai escorts with the zeal to serve men. She served people with all ages. Even, men from different economic condition is not a problem to her. You can get the sex service in Mumbai area. You can get all types of entertainment in affordable rate. The packages are available online with details. You can ask the Mumbai escorts for the contact details. They can move out with you to a corporate party. There are scope for meeting in hotel. You get full enjoyment with the beautiful escort in Mumbai. If you want to check their vital statistics and figure, enough opportunity is there in the escort gallery. Version Of Mumbai Escorts I am Priya Singh, age 24 years. I have an optimum height of 5’6”. So, males with medium and low height can reach me. Many of my clients prefers me due to my height. Some of them don’t like the Mumbai escorts with too much height. They look for an Indian women height. I am lucky to fit their as per their expectation. You can get maximum comfort within my lap. I can also give you some joyous moment. Do you have any stress in your life? Is the tension of office haunting you all day long? A short and sensual message can help. I am one of the Mumbai escorts with the skill of body and head massage. You can come to me for this service even. Payment Of Mumbai Escorts Some of you are too much tensed about the payment structure. Don’t worry at all. We have made the package for people with all economic background. Unlike other agencies, we don’t concentrate on only rich people. Rather, our Mumbai escorts are open to all types of people. Our escort agency have packages that can suite your budget. You must give an advance payment before availing the service. But, we are trustworthy in this trade. You will definitely get your service once we have received our fees. if you wish You can check the rates of other escort agencies. finally You will find our rates are more in your budget. We can also reduce your rate once you become our regular customer. Call Me- +91 9987215552

Trở về
  • Magento plug-ins
  • Magento plug-ins

    Magento2 gave very good concept called Plugin   we can do what ever after and before core function and also we have...

  • HOW TO CREATE MENU IN MAGENTO 2 ADMIN
  • HOW TO CREATE MENU IN MAGENTO 2 ADMIN

    magento-2-admin- menu My previous tutorial show you how to create a simple module in Magento 2, learn more here: http://www.venustheme.com/how-to-create-magento-2-module/....