CTLModuleMaker -> Filter by Category doesn´t work

Have a question or a suggestion about a 3rd party addon module or plugin?
Let us know here.
Post Reply
jonnieb
Forum Members
Forum Members
Posts: 16
Joined: Thu Sep 11, 2008 10:32 pm

CTLModuleMaker -> Filter by Category doesn´t work

Post by jonnieb »

Hi!

I created a module with CTLModuleMaker. My aim is to create a product list. I have two levels.

Category -> Product

Everything works fine except the "Filter by" Functionality in the product view. I can add Categories, and Products, which are assigned to a category. In "Products", a drop down menu is shown "Filter by Category". When i send the form, no results are shown. The search which is displayed below this drop down, works fine.

Has anybody a solution for this?

Regards,
Markus
User avatar
plger
Forum Members
Forum Members
Posts: 196
Joined: Wed Oct 15, 2008 10:38 am

Re: CTLModuleMaker -> Filter by Category doesn´t work

Post by plger »

Hi Markus,
This is a bug of the 1.8.5 release ( http://dev.cmsmadesimple.org/bug/view/3433 ).
As the bug seemed very minor to me and I don't want to disturb the forge with a new release for every small change, I did not make a new release, but the fix is included in the SVN version.
(If you don't know how to access the SVN, you can simply replace your function.createDefaultadmin.php with the one here: http://viewsvn.cmsmadesimple.org/filedetails.php?repname=ctlmodulemaker&path=%2Ffunction.createDefaultadmin.php and it will fix your bug)
Pierre-Luc
User avatar
plger
Forum Members
Forum Members
Posts: 196
Joined: Wed Oct 15, 2008 10:38 am

Re: CTLModuleMaker -> Filter by Category doesn´t work

Post by plger »

Until a new release, the corrected function.createDefaultadmin.php file is here :
http://viewsvn.cmsmadesimple.org/filede ... php&rev=44
jonnieb
Forum Members
Forum Members
Posts: 16
Joined: Thu Sep 11, 2008 10:32 pm

Re: CTLModuleMaker -> Filter by Category doesn´t work

Post by jonnieb »

Hi Pierre-Luc!

Thanks for your help, but when I replace the createDefaultadmin.php file, i get an error when i create a new module:
Parse error: syntax error, unexpected T_VARIABLE in clients/modules/CTLModuleMaker/function.createDefaultadmin.php on line 3

Any ideas?

Best,
Markus
User avatar
plger
Forum Members
Forum Members
Posts: 196
Joined: Wed Oct 15, 2008 10:38 am

Re: CTLModuleMaker -> Filter by Category doesn´t work

Post by plger »

Don't know why, but I've been reworking the defaultadmin and have lost count of the revisions.
The content of your file should be this. If it still doesn't work, tell me and I'll upload the new release sooner than I planned.
plger

Code: Select all

<?php

$reorderbtn = '';
if(!$infos["is_shared"]){
    $reorderbtn = '."  ".$this->CreateLink($id, "reorder", $returnid, $admintheme->DisplayImage("icons/system/reorder.gif", "","","","systemicon")." ".$this->Lang("reorder"))';
}

$modulename = $infos['nameofmodule'];

$defaultadmin = '<?php
if (!isset($gCms)) exit;
$admintheme = $gCms->variables["admintheme"];
$active_tab = isset($params["active_tab"])?$params["active_tab"]:"'.$levels[0][0].'";

echo \'
<__script__ type="text/javascript">
function ctlmm_search(what,inwhat){
    var destination = document.getElementById(inwhat);
    if(!destination) return;
    var therows = destination.getElementsByTagName("tbody")[0].getElementsByTagName("tr");
    for(i=0;i<therows.length;i++){
        var newstyle = "none";
        var thecolumns = therows[i].getElementsByTagName("td");
        for(j=0;j<thecolumns.length;j++){
            if(thecolumns[j].className != "ctlmm_nosearch"){
                var tmpa = thecolumns[j].getElementsByTagName("a")[0];
                if(tmpa && tmpa.innerHTML.toLowerCase().indexOf(what.toLowerCase()) >= 0)    newstyle = "table-row";
                if(!tmpa && thecolumns[j].innerHTML.toLowerCase().indexOf(what.toLowerCase()) >= 0)        newstyle = "table-row";
            }
        }
        therows[i].style.display = newstyle;
    }
}

</__script>\';

echo $this->StartTabHeaders();';

foreach($levels as $level){
    $defaultadmin .= '
    if( $this->CheckPermission("'.$modulename.'_advanced") || $this->CheckPermission("'.$modulename.'_manage_'.$level[0].'") ) {
        echo $this->SetTabHeader("'.strtolower($level[0]).'", $this->Lang("'.$level[0].'_plural"), "'.$level[0].'" == $active_tab ? true : false);
    }';
}
if(count($listfields) > 0){
    $defaultadmin .= '
    if( $this->CheckPermission("'.$modulename.'_advanced") ) {
        echo $this->SetTabHeader("fieldoptions", $this->Lang("fieldoptions"), "fieldoptions" == $active_tab ? true : false);        
    }';
}
$defaultadmin .= '
    if( $this->CheckPermission("'.$modulename.'_advanced") || $this->CheckPermission("Modify Templates") ) {
        echo $this->SetTabHeader("templates", $this->Lang("templates"), "templates" == $active_tab ? true : false);        
    }
    if( $this->CheckPermission("'.$modulename.'_advanced") ) {
        echo $this->SetTabHeader("queries", $this->Lang("queries"), "queries" == $active_tab ? true : false);        
    }
echo $this->EndTabHeaders();



echo $this->StartTabContent();
';

#####################################
## CONTENT

$i = 0;
while($i < count($levels)){
    $level = $levels[$i];
    $defaultadmin .= '

if( $this->CheckPermission("'.$modulename.'_manage_'.$level[0].'") ) {
    echo $this->StartTab("'.strtolower($level[0]).'");
';
    if($i != 0) $defaultadmin .= '
    if($this->countsomething("'.$levels[$i - 1][0].'") > 0){
';
    $defaultadmin .= '
        $whereclause = array();
        echo \'<div style="float: right; text-align: right;">\';
';
    $tmpbr = "";
    if($i != 0 && $levels[$i -1][2] == 0){
        $tmpbr = "<br/>";
        $defaultadmin .= '
            if(!isset($params["'.$level[0].'_showonly"])){
                $filteroptions = $this->get_options("'.$levels[$i-1][0].'");
                echo $this->CreateFormStart($id, "defaultadmin", $returnid);
                    echo "<p>".$this->Lang("filterby_'.$levels[$i-1][0].'")." : ";
                    echo $this->CreateInputDropdown($id, "'.$level[0].'_showonly", $filteroptions, -1);
                    echo $this->CreateInputHidden($id, "active_tab", "'.$level[0].'");
                    echo " ".$this->CreateInputSubmit($id, "submit", lang("submit"))."</p>";
                echo $this->CreateFormEnd();
            }else{
                echo "<p>".$this->CreateLink($id, "defaultadmin", $returnid, $this->Lang("showall"), array("active_tab" => "'.$level[0].'"))."</p>";
                $whereclause = array("parent_id"=>$params["'.$level[0].'_showonly"]);
            }';
    }
        $tmpjs = "' onkeyup=\"ctlmm_search(this.value,\\'".$level[0]."_table\\');\"'";
        $defaultadmin .= '
            echo "<p>".$this->Lang("searchthistable")." ".$this->CreateInputText($id, "searchtable_'.$level[0].'", "", 10, 64, '.$tmpjs.')."</p>";
            echo "</div>";
            ';
        $defaultadmin .= '
            echo "'.$tmpbr.'<p>".$this->CreateLink($id, "edit'.$level[1].'", $returnid, $admintheme->DisplayImage("icons/system/newobject.gif", "","","","systemicon")." ".$this->Lang("add_'.$level[0].'"))'.$reorderbtn.'."</p>'.$tmpbr.'";
            $itemlist = $this->get_level_'.$level[0].'(isset($whereclause)?$whereclause:array(),true, $id, $returnid);
            $this->smarty->assign("tableid", "'.$level[0].'_table");
            $this->smarty->assign("itemlist", $itemlist);
            $adminshow = array(';
        foreach($level[5] as $field){
            $nosearch = false;
            $fieldname = $level[0].'_'.$field;
            if($field == 'editlink' || $field == 'name'){
                $fieldname = 'name';
                $field = 'editlink';
            }elseif($field == 'alias'){
                $fieldname = 'alias';
                $field = 'alias';
            }elseif($field == 'movelinks'){
                $nosearch = true;
                $fieldname = 'reorder';
            }elseif($field == 'parent'){
                $fieldname = $levels[$i -1][0];
                $field = 'parent_name';
            }elseif($field == 'active'){
                $nosearch = true;
                $fieldname = 'active';
                $field = 'toggleactive';
            }elseif($field == 'isdefault'){
                $nosearch = true;
                $fieldname = 'isdefault';
                $field = 'toggledefault';
            }elseif($field == 'nbchildren'){
                $fieldname = $field = 'nbchildren';
            }else{
                // we find out what kind of field this is:
                $realfield = false;
                foreach($level[4] as $tmpfield){
                    if($tmpfield[0] == $field) $realfield = $tmpfield;
                }
                if($realfield[1] == 6 || $realfield[1] == 7){
                    // if it's a list field, display only with single values
                    if(isset($realfield[5]['multiple']) && $realfield[5]['multiple'] == 1){
                        $field = false;
                    }else{
                        $field = $field.'_namevalue';
                    }
                }elseif($realfield[1] == 12){
                    $field .= '_admindisplay';
                }
            }
            if($field && ($field != 'parent_name' || $levels[$i-1][2] == 0)){
                $defaultadmin .= '
                array($this->Lang("'.$fieldname.'"),"'.$field.'",'.($nosearch?'true':'false').'),';
            }
        }
            $defaultadmin .= '
                array($this->Lang("Actions"),"deletelink",true)        
                );
            $this->smarty->assign("adminshow", $adminshow);
            echo $this->ProcessTemplate("adminpanel.tpl");
            echo "<p>".$this->CreateLink($id, "edit'.$level[1].'", $returnid, $admintheme->DisplayImage("icons/system/newobject.gif", "","","","systemicon")." ".$this->Lang("add_'.$level[0].'"))."</p>";
';
    if($i != 0) $defaultadmin .= '
    }else{
        echo "<p>".$this->Lang("error_noparent")."</p>";
    }
';

$defaultadmin .= '
    echo $this->EndTab();

}';
    $i++;
}

if(count($listfields) > 0){

$defaultadmin .= '

if( $this->CheckPermission("Modify Templates") || $this->CheckPermission("'.$modulename.'_advanced") ) {
    echo $this->StartTab("fieldoptions");
';

foreach($listfields as $field){
    $defaultadmin .= '
    echo "<fieldset style=\"width: 600px;\"><legend><b>('.$field[0].') '.$field[1].' :</b></legend><ul>";
    $options = $this->get_fieldoptions("'.$field[0].'_'.$field[1].'",true);
    echo \'<table cellspacing="0" cellpadding="0" class="pagetable">\';
    $rowclass = 1;
    foreach($options as $option){
        $newparams = array("field"=>"'.$field[0].'_'.$field[1].'", "optionid"=>$option->id, "currentorder"=>$option->item_order);
        echo "
        <tr class=\"row".$rowclass."\"><td>".$option->name."</td><td width=\"120\">";
        echo $this->CreateLink($id, "rename_optionvalue", $returnid, $admintheme->DisplayImage("icons/system/edit.gif", lang("edit"),"","","systemicon"), array_merge($newparams, array("optionname"=>$option->name)))." ";
        echo $this->CreateLink($id, "delete_optionvalue", $returnid, $admintheme->DisplayImage("icons/system/delete.gif",lang("delete"),"","","systemicon"), $newparams, $this->Lang("prompt_deleteoption"));
        echo $this->CreateLink($id, "move_optionvalue", $returnid, $admintheme->DisplayImage("icons/system/arrow-u.gif",lang("up"),"","","systemicon"), array_merge($newparams, array("move"=>"up")));
        echo $this->CreateLink($id, "move_optionvalue", $returnid, $admintheme->DisplayImage("icons/system/arrow-d.gif",lang("down"),"","","systemicon"), array_merge($newparams, array("move"=>"down")));
        echo "</td></tr>";
        $rowclass = $rowclass == 1?2:1;
    }
    echo "</table>";
    echo "<p>".$this->CreateFormStart($id, "add_optionvalue");
        echo "<p>".$this->Lang("addoption").": ".$this->CreateInputText($id, "optionname", "", 20, 64);
        echo $this->CreateInputHidden($id, "field", "'.$field[0].'_'.$field[1].'");
        echo " ".$this->CreateInputSubmit($id, "submit", lang("submit"))."</p>";
    echo $this->CreateFormEnd();
    echo "</p></fieldset><br/><br/>";';
}

$defaultadmin .= '
    echo $this->EndTab();
}
';
}


$defaultadmin .= '

if( $this->CheckPermission("'.$modulename.'_advanced") || $this->CheckPermission("Modify Templates") ) {
    echo $this->StartTab("templates");

    echo "<h2>".$this->Lang("defaulttemplates")."</h2>";
    echo $this->CreateFormStart($id, "changedeftemplates", $returnid);
    $templatelist = $this->ListTemplates($this->GetName());
    $deftpls = $this->getDefaultTemplates();
    $tploptions = array();
    $itemlist = array();
    foreach($templatelist as $onetpl){
       $tploptions[$onetpl] = $onetpl;
       $tpl = new stdClass();
       $tpl->editlink = $this->CreateLink( $id, "editTemplate", $returnid, $onetpl, array("tplname"=>$onetpl) );
       $tpl->deletelink = in_array($onetpl, $deftpls)?"":$this->CreateLink( $id, "deletetpl", $returnid, $admintheme->DisplayImage("icons/system/delete.gif", $this->Lang("delete"), "", "", "systemicon"), array("tplname"=>$onetpl) );
       array_push($itemlist, $tpl);
    }
';
    foreach($levels as $level){
       $defaultadmin .= '
       echo "    <div class=\"pageoverflow\">
             <p class=\"pagetext\">".$this->Lang("deftemplatefor")." \"'.$level[0].'\":</p>
             <p class=\"pageinput\">".$this->CreateInputDropdown($id,"listtemplate_'.$level[0].'",$tploptions,-1,$this->GetPreference("listtemplate_'.$level[0].'"))."</p>
        </div>
    ";';
    }
$defaultadmin .= '
    echo "    <div class=\"pageoverflow\">
             <p class=\"pagetext\">".$this->Lang("defdetailtemplate").":</p>
             <p class=\"pageinput\">".$this->CreateInputDropdown($id,"finaltemplate",$tploptions,-1,$this->GetPreference("finaltemplate"))."</p>
        </div>
    ";
    $tploptions[$this->Lang("uselevellisttpl")] = "**";
    echo "    <div class=\"pageoverflow\">
             <p class=\"pagetext\">".$this->Lang("defsearchresultstemplate").":</p>
             <p class=\"pageinput\">".$this->CreateInputDropdown($id,"searchresultstemplate",$tploptions,-1,$this->GetPreference("searchresultstemplate",0))."</p>
        </div>
    <p>".$this->CreateInputSubmit($id, "submit", lang("submit"))."</p>";
    echo $this->CreateFormEnd();

    echo "<br/><br/><hr/><h2>".$this->Lang("templates")."</h2>";
    $this->smarty->assign("itemlist", $itemlist);
    $adminshow = array(    array($this->Lang("template"), "editlink"), array($this->Lang("Actions"), "deletelink")    );
    $this->smarty->assign("adminshow", $adminshow);
    $this->smarty->assign("tableid", false);
    echo $this->ProcessTemplate("adminpanel.tpl");
    echo "<p>".$this->CreateLink($id, "editTemplate", $returnid, $admintheme->DisplayImage("icons/system/newobject.gif", "","","","systemicon")." ".$this->Lang("addtemplate"))."</p>";

    echo $this->EndTab();
}

if( $this->CheckPermission("'.$modulename.'_advanced") ) {
    echo $this->StartTab("queries");

        echo "<p>".$this->CreateLink($id, "adminquery", $returnid, $admintheme->DisplayImage("icons/system/newobject.gif", "","","","systemicon")." ".$this->Lang("createquery"))."</p>";
        $itemlist = $this->get_queries($where=array(), true, $id, $returnid);
        $this->smarty->assign("itemlist", $itemlist);
        $adminshow = array( array("id","id"),
                            array($this->Lang("name"), "name"),
                            array($this->Lang("Actions"), "actions")
                            );
        $this->smarty->assign("adminshow", $adminshow);
        $this->smarty->assign("tableid", false);
        echo $this->ProcessTemplate("adminpanel.tpl");
        echo "<p>".$this->CreateLink($id, "adminquery", $returnid, $admintheme->DisplayImage("icons/system/newobject.gif", "","","","systemicon")." ".$this->Lang("createquery"))."</p>";
        
    echo $this->EndTab();
}
echo $this->EndTabContent();

?'.'>';

?>
Post Reply

Return to “Modules/Add-Ons”