Skip to content

Instantly share code, notes, and snippets.

@pepebe
Last active August 29, 2015 14:13
Show Gist options
  • Select an option

  • Save pepebe/f77f90ddfae1fcdca9a1 to your computer and use it in GitHub Desktop.

Select an option

Save pepebe/f77f90ddfae1fcdca9a1 to your computer and use it in GitHub Desktop.

Revisions

  1. pepebe revised this gist Jan 12, 2015. No changes.
  2. pepebe revised this gist Jan 12, 2015. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion ppb_managerBreadCrumbs.plugin.php
    Original file line number Diff line number Diff line change
    @@ -4,7 +4,7 @@
    Version: 0.1
    original plugincode written by @argnisto
    frankensteined by pepebe.
    frankensteined by info@pepebe.
    Description: The plugin adds a breadcrumb navigation below the pagetitle
    for easier navigation/orientation.
  3. pepebe revised this gist Jan 12, 2015. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion ppb_managerBreadCrumbs.plugin.php
    Original file line number Diff line number Diff line change
    @@ -14,7 +14,7 @@
    The complete code for moddevtools is hosted on github: https://github.com/argnist/modDevTools
    If you want to have breadcrumbs, but you don't need the rest of modDevTools,
    this is what you need.
    this will do the job.
    Usage: Copy code into a new plugin (ppb_managerBreadCrumbs) and set it to OnDocFormPrerender. Done.
  4. pepebe revised this gist Jan 12, 2015. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion ppb_managerBreadCrumbs.plugin.php
    Original file line number Diff line number Diff line change
    @@ -1,6 +1,6 @@
    <?php
    /*
    ppb_managerBreadCrumbs
    ppb_managerBreadCrumbs for modx 2.3.x
    Version: 0.1
    original plugincode written by @argnisto
  5. pepebe revised this gist Jan 12, 2015. No changes.
  6. pepebe revised this gist Jan 12, 2015. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion ppb_managerBreadCrumbs.plugin.php
    Original file line number Diff line number Diff line change
    @@ -9,7 +9,7 @@
    Description: The plugin adds a breadcrumb navigation below the pagetitle
    for easier navigation/orientation.
    Note: Most of the code was shamelessly frankensteined from modDevTools by argnis
    Note: Most of the code was shamelessly frankensteined from modDevTools by argnist.
    modDevTools can be installed by modx package manager. Try it, its a very useful plugin.
    The complete code for moddevtools is hosted on github: https://github.com/argnist/modDevTools
  7. pepebe revised this gist Jan 12, 2015. 1 changed file with 4 additions and 3 deletions.
    7 changes: 4 additions & 3 deletions ppb_managerBreadCrumbs.plugin.php
    Original file line number Diff line number Diff line change
    @@ -9,13 +9,14 @@
    Description: The plugin adds a breadcrumb navigation below the pagetitle
    for easier navigation/orientation.
    Note: Most of the code was shamelessly frankensteined from modDevTools by argnis
    (try it, its a very useful plugin).
    Note: Most of the code was shamelessly frankensteined from modDevTools by argnis
    modDevTools can be installed by modx package manager. Try it, its a very useful plugin.
    The complete code for moddevtools is hosted on github: https://github.com/argnist/modDevTools
    If you want to have breadcrumbs, but you don't need the rest of modDevTools,
    this is what you need.
    Usage: Copy code into plugin and set it to OnDocFormPrerender. Done.
    Usage: Copy code into a new plugin (ppb_managerBreadCrumbs) and set it to OnDocFormPrerender. Done.
    2do:
    Rewrite the whole thing and get rid of stuff we don't need.
  8. pepebe revised this gist Jan 12, 2015. 1 changed file with 3 additions and 3 deletions.
    6 changes: 3 additions & 3 deletions ppb_managerBreadCrumbs.plugin.php
    Original file line number Diff line number Diff line change
    @@ -3,14 +3,14 @@
    ppb_managerBreadCrumbs
    Version: 0.1
    original plugincode written by argnist
    original plugincode written by @argnisto
    frankensteined by pepebe.
    Description: The plugin adds a breadcrumb navigation below the pagetitle
    for easier navigation/orientation.
    Note: Moste of the code was shamelessly frankensteined from modDevTools by argnis
    (a very useful plugin).
    Note: Most of the code was shamelessly frankensteined from modDevTools by argnis
    (try it, its a very useful plugin).
    If you want to have breadcrumbs, but you don't need the rest of modDevTools,
    this is what you need.
  9. pepebe created this gist Jan 12, 2015.
    242 changes: 242 additions & 0 deletions ppb_managerBreadCrumbs.plugin.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,242 @@
    <?php
    /*
    ppb_managerBreadCrumbs
    Version: 0.1
    original plugincode written by argnist
    frankensteined by pepebe.
    Description: The plugin adds a breadcrumb navigation below the pagetitle
    for easier navigation/orientation.
    Note: Moste of the code was shamelessly frankensteined from modDevTools by argnis
    (a very useful plugin).
    If you want to have breadcrumbs, but you don't need the rest of modDevTools,
    this is what you need.
    Usage: Copy code into plugin and set it to OnDocFormPrerender. Done.
    2do:
    Rewrite the whole thing and get rid of stuff we don't need.
    */
    $debug = false;

    $limit = 3;

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

    if(!function_exists('writeToLog')){
    function writeToLog($msg,$debug){
    if($debug){
    $modx->log(modX::LOG_LEVEL_ERROR, '[managerBreadCrumbs] moddevtools plugin ' .$msg);
    }
    return;

    }
    }

    if(is_object($modx->getObject('modPlugin', array ('name' => 'modDevTools', 'disabled' => 0), true))){
    $msg = 'installed and active. No need for additional breadcrumbs';
    writeToLog($msg,$debug);
    return;
    }
    else {
    $msg = 'either not installed or deactivated. Lets have our own breadcrumbs';
    writeToLog($msg,$debug);
    }

    $config = array();

    if(!function_exists(getBreadCrumbs)){
    function getBreadCrumbs($resource,$modx,$limit) {

    if (($modx === modSystemEvent::MODE_NEW) || !$resource) {
    if (!isset($_GET['parent'])) {return;}
    // $resource = $modx->getObject('modResource', $_GET['parent']);
    if (!$resource) {return;}
    }

    $context = $resource->get('context_key');
    if ($context != 'web') {
    $modx->reloadContext($context);
    }

    $resources = $modx->getParentIds($resource->get('id'), $limit, array( 'context' => $context ));

    if ($modx === modSystemEvent::MODE_NEW) {
    array_unshift($resources, $_GET['parent']);
    }
    $crumbs = array();
    $root = $modx->toJSON(array(
    'text' => $context,
    'className' => 'first',
    'root' => true,
    'url' => '?'
    ));
    $controllerConfig = $modx->controller->config;
    $action = $controllerConfig['controller'];
    if ($action == 'resource/create') {
    $action = 'resource/update';
    }
    if (isset($controllerConfig['id'])) {
    if ($controllerConfig['controller'] == 'resource/create') {
    $actionObj = $modx->getObject('modAction', array('controller' => 'resource/update'));
    $action = $actionObj->get('id');
    } else {
    $action = $controllerConfig['id'];
    }
    }

    $modx->log(modX::LOG_LEVEL_ERROR, '[managerBreadCrumbs] action: ' . $action);

    $isAll = false;
    for ($i = count($resources)-1; $i >= 0; $i--) {
    $resId = $resources[$i];
    if ($resId == 0) {
    continue;
    }
    $parent = $modx->getObject('modResource', $resId);
    if (!$parent) {break;}
    if ($parent->get('parent') == 0) {
    $isAll = true;
    }
    $crumbs[] = array(
    'text' => $parent->get('pagetitle'),
    'url' => '?a=' . $action . '&id=' . $parent->get('id')
    );
    }

    $modx->log(modX::LOG_LEVEL_ERROR, '[managerBreadCrumbs] crumbs: ' . print_r($crumbs,true));

    if ((count($resources) == $limit) && !$isAll) {
    array_unshift($crumbs, array(
    'text' => '...',
    ));
    }
    // Add pagetitle of current page
    if ($modx === modSystemEvent::MODE_NEW) {
    $pagetitle = $modx->lexicon('new_document');
    } else {
    $pagetitle = $resource->get('pagetitle');
    }
    $crumbs[] = array('text' => $pagetitle);
    $crumbs = $modx->toJSON($crumbs);

    //$modx->controller->addJavascript('../assets/components/ppb_managerBreadcrumbs/js/breadcrumbs.panel.js');

    $tpl = "
    <script id='managerBreadCrumbs_tpl' type='text' data-plugin='managerBreadCrumbs'>
    <tpl if=\"typeof(trail) != 'undefined'\">
    <div class='crumb_wrapper'>
    <ul class='crumbs'>
    <tpl for=\"trail\">
    <li {[values.className != 'undefined' ? 'class=\"'+values.className+'\"' : '' ]}>
    <tpl if=\"typeof url != 'undefined'\">
    <button type='button' data-url='{url}' class=\"controlBtn {[values.root ? ' root' : '' ]}\">
    {text}
    </button>
    </tpl>
    <tpl if=\"typeof url == 'undefined'\">
    <span class=\"text{[values.root ? ' root' : '' ]}\">
    {text}
    </span>
    </tpl>
    </li>
    </tpl>
    </ul>
    </div>
    </tpl>
    </script>
    ";

    $modx->controller->addHtml($tpl);

    $panel = "
    <script type='text/javascript' data-plugin='managerBreadCrumbs'>
    var modDevTools = function(config) {
    config = config || {};
    modDevTools.superclass.constructor.call(this,config);
    };
    Ext.extend(modDevTools,Ext.Component,{
    page:{},window:{},grid:{},tree:{},panel:{},combo:{},config: {},view: {},utils: {}
    });
    Ext.reg('moddevtools',modDevTools);
    modDevTools = new modDevTools();
    if (typeof modDevTools.modx23 == 'undefined') {
    modDevTools.modx23 = typeof MODx.config.connector_url != 'undefined' ? true : false;
    }
    modDevTools.BreadcrumbsPanel = function(config) {
    config = config || {};
    Ext.applyIf(config,
    {
    bdMarkup: document.getElementById('managerBreadCrumbs_tpl').innerHTML
    ,bodyStyle: {background: 'transparent'}
    }
    );
    modDevTools.BreadcrumbsPanel.superclass.constructor.call(this,config);
    }
    Ext.extend(modDevTools.BreadcrumbsPanel,MODx.BreadcrumbsPanel,{
    onClick: function(e) {
    var target = e.getTarget();
    if (typeof target != 'undefined') {
    var url = target.getAttribute('data-url');
    if (url) {
    MODx.loadPage(url);
    }
    }
    }
    ,_updatePanel: function(data){
    this.tpl.overwrite(this.body, data);
    var \$this = this;
    setTimeout(function(){
    \$this.ownerCt.doLayout();
    }, 200);
    }
    ,getPagetitle: function(){
    var pagetitleCmp = Ext.getCmp('modx-resource-pagetitle');
    var pagetitle;
    if (typeof pagetitleCmp != 'undefined') {
    pagetitle = pagetitleCmp.getValue();
    if (pagetitle.length == 0) {
    pagetitle = _('new_document');
    }
    } else {
    pagetitle = '';
    }
    return pagetitle;
    }
    });
    Ext.reg('moddevtools-breadcrumbs-panel',modDevTools.BreadcrumbsPanel);
    Ext.onReady(function() {
    var header = Ext.getCmp('modx-resource-header').ownerCt;
    header.insert( 1, {
    xtype: 'moddevtools-breadcrumbs-panel'
    ,id: 'resource-breadcrumbs'
    ,desc: ''
    ,root : {$root}
    });
    header.doLayout();
    var crumbCmp = Ext.getCmp('resource-breadcrumbs');
    var bd = { trail : {$crumbs}};
    crumbCmp.updateDetail(bd);
    Ext.getCmp('modx-resource-pagetitle').on('keyup', function(){
    bd.trail[bd.trail.length-1] = {text: crumbCmp.getPagetitle()};
    crumbCmp._updatePanel(bd);
    });
    });
    </script>";

    $modx->controller->addHtml($panel);
    }
    }

    getBreadCrumbs($resource,$modx,$limit);

    return;