[ic] Left Nav Result (now awesome auto_populate replacement)

Julia Jacobs interchange-users@interchange.redhat.com
Thu Feb 21 00:04:01 2002


On 2/20/02 7:21 PM, "Brendan Crosser-McGay" <brendan@paymentonline.com>
wrote:

> Also look for the awesome replacement for the auto_populate in the admin
> interface made by Mike, its in the mailing list somewhere just look for it
> you'll find it.
> 
> -Brendan

I found this awesome replacement and am re-posting it for those who are
unable to find it in the achieves:

[set page_title]Layout auto-populate[/set]
[set ui_class]Design[/set]
[set page_banner]Layout Editor: Organize your site into categories[/set]
[set page_perm]layout=3De[/set]
[set help_name]layout.edit[/set]
[set icon_name]icon_pages.gif[/set]
[tmp meta_header]
    [include include/table_populator]
    <SCRIPT LANGUAGE=3DJavaScript>
function change_ta (ta_field, selector) {
          if(selector =3D=3D 'complex') {
            ta_field.rows =3D 20;
            ta_field.disabled =3D false;
        }
        else {
            ta_field.rows =3D 1;
            ta_field.disabled =3D true;
        }
        return;
      }
    </SCRIPT>
[/tmp]
[seti ui_body_extra][/seti]

@_UI_STD_HEAD_@
<!-- ----- BEGIN REAL STUFF ----- -->

<form action="[area __UI_BASE__/layout]" method=GET>
<input type=hidden name=mv_action value=back>

<table border=0 __UI_T_PROPERTIES__>
<tr>
<td colspan=2 bgcolor=__UI_C_TOPBLOCKBAR__><img src="bg.gif" =
width=__UI_MAIN_WIDTH__ height=1></td>
</tr>

<tr bgcolor="__UI_C_INTBLOCK__">
<td width=25%>

1. Choose a table as the source:

</td>
<td>
[if !value area_table]
    [value name=area_table set=products hide=1]
    [value name=area_column set=prod_group hide=1]
    [value name=cat_column set=category hide=1]
[/if]
<select name="area_table"
    onChange="
        populateTable(
            this.form.area_table.options,
            this.form.area_column.options,
            =
this.form.area_table.options[this.form.area_table.selectedIndex].value
            );
        populateTable(
            this.form.area_table.options,
            this.form.cat_column.options,
            =
this.form.area_table.options[this.form.area_table.selectedIndex].value
            );
    "
size=1>
[loop list="[list-databases]" option=area_table]
    <OPTION VALUE="[loop-code]">[loop-code]</OPTION>
[/loop]
</select>
</td>
</tr>
<tr>
<td>
2. Choose a column to populate areas:
</td>
<td>
<select name="area_column">
<option value=""> -- none --
[loop list="[db-columns table='[value area_table]']" =
option=area_column]
<option>[loop-code]
[/loop]
</select>
</td>
</tr>
<tr>
<td>
3. Choose a column to populate categories:
</td>
<td>
<select name="cat_column">
<option value=""> -- none --
[loop list="[db-columns table='[value area_table]']" =
option=cat_column]
<option>[loop-code]
[/loop]
</select>
</td>
</tr>
<tr>
<td>
4. Choose a search type:
</td>
<td>
<select name="cat_type" =
onChange="change_ta(this.form.search_code,this.form.cat_type.value)">
<option value="narrow"> Narrow search (area and category match)
<option value="simple"> Simple search (only category matches)
<option value="complex"> Complex search (template substitution on =
below)
</select>
</td>
</tr>
<tr>
<td valign=top>
5. Complex search code:
</td>
<td>
NOTE: Not active unless complex search selected above.<br>
<textarea rows=1 cols=50 name=search_code disabled=true>
fi=products
    st=db
    co=yes

    sf=prod_group
    se=~PROD_GROUP~
    op=eq

    sf=category
    se=~CATEGORY~
    op=eq

    sf=inactive
    se=1
    op=ne

    rf=sku

    va=banner_text=~BANNER_TEXT~
</textarea>
</td>
</tr>
<tr bgcolor="__UI_C_INTBLOCK__">
<td>
6. Select the page class:
</td>
<td>
<INPUT NAME=which_page VALUE=all>
</td>
</tr>
<tr bgcolor="__UI_C_INTBLOCK__">
<td>
7. Select the page area:
</td>
<td>
<INPUT NAME=sel VALUE=left>
</td>
</tr>
<tr bgcolor="__UI_C_INTBLOCK__">
<td>
8. Decide whether to remove previous settings:
</td>
<td>
<SELECT NAME=nuke><OPTION VALUE=0>No <OPTION VALUE=1>Yes</SELECT>
</td>
</tr>
<tr>
<td>
9. Click this button to populate:
</td>
<td>
[button text="Populate"]
[flag type=write table="area"]
[flag type=write table="cat"]
[seti ui_failure]
[perl tables="area cat [cgi area_table]"]
    my $go_page = $CGI->{mv_nextpage};
    $CGI->{mv_nextpage} = '@@MV_PAGE@@';
    my $ptab = $CGI->{area_table}
        or return "no area source table";
    my $pdb = $Db{$ptab}
        or return "area source table bad";
    my $adb = $Db{area}
        or return "no area table";
    my $cdb = $Db{cat}
        or return "no cat table";
    my $acol = $CGI->{area_column};
    my $ccol = $CGI->{cat_column};
    if(! $acol and ! $ccol ) {
        return "no column to populate either";
    }

    my $selector = '';
    my $selcode = '';

    my %area_defaults = (
        name => undef,
        which_page    => $CGI->{which_page} || 'all',
        sort    => '05',
        sel    => $CGI->{sel} || 'left',
        display_type => 'name',
    );
    my %catmap;
    my $narrow;
    my $lt;
    my $search_code;
    if($CGI->{cat_type} eq 'simple') {
        $lt = 'simple';
        $selector = 'category=~CATEGORY~';
        $search_code = '';
    }
    elsif($CGI->{cat_type} eq 'narrow') {
        $narrow = 1;
        $lt = 'simple';
        $selector = <<EOF;
category=~CATEGORY~
prod_group=~PROD_GROUP~
EOF
        $search_code = '';
    }
    else {
        $lt = 'complex';
        $selector = '';
        $search_code = $CGI->{search_code};
    }

    my %cat_defaults = (
        link_type => $lt,
        selector => $selector,
        search => $search_code,
        sort    => '05',
        display_type => 'name'
    );

    if($CGI->{nuke}) {
        $adb->query('delete from area');
        $cdb->query('delete from cat');
    }
    if($acol) {
        $adb->config('AUTO_NUMBER', '1000') if !
$adb->config('_Auto_number');
        return "area column $acol doesn't exist"
            unless $pdb->column_exists($acol);
        my $ary = $pdb->query("select distinct $acol from $ptab order by =
$acol")
            or return "area column query failed";
        for(@$ary) {
            my ($area) = (@$_);
            my $key = $adb->set_row('');
            return "no autonumbering available" if ! $key;
            $catmap{$area} = $key;
            for(keys %area_defaults) {
                $adb->set_field($key, $_, $area_defaults{$_} || $area);
            }
        }
    }

    my %catdone;
    if($ccol) {
        $cdb->config('AUTO_NUMBER', '1000') if !
$cdb->config('_Auto_number');
        return "cat column $ccol doesn't exist"
            unless $pdb->column_exists($ccol);
        my ($ary, $fh) = $pdb->query(
                                "select $acol, $ccol from $ptab order by
$ccol",
                                )
            or return "cat column query failed";
        foreach my $row (@$ary) {
            my $area = $row->[$fh->{$acol}];
            my $cat  = $row->[$fh->{$ccol}];
            my $donetag = $narrow ? "$area:$cat" : $cat;
            next if $catdone{$donetag}++;
            my $key = $cdb->set_row('');
            return "no cat autonumbering available" if ! $key;

            my %defaults = %cat_defaults;
            $defaults{name} = $cat;
            $defaults{sel} = $catmap{$area};
            $defaults{search} =~ s/~ (\w+) ~/$row->[$fh->{lc $1}]/gx;
            $defaults{selector} =~ s/~ (\w+) ~/$row->[$fh->{lc $1}]/gx;
        =09
            for(keys %defaults) {
                Log("setting col=$_ key=$key = $defaults{$_}");
                $cdb->set_field($key, $_, $defaults{$_});
            }
        }
    }
    $CGI->{mv_nextpage} = $go_page;
    my $out = $Tag->uneval( { ref => \%catmap } );
    $out =~ s/,/,\n/g;
    #return '<XMP>' . $Tag->uneval( { ref => \%catmap } ) . "</XMP";
    return;
[/perl]
[/seti]
[/button]
<BR>
</td>
</tr>

<tr>
<td colspan=2 bgcolor=__UI_C_TOPBLOCKBAR__><img src="bg.gif" =
width=__UI_MAIN_WIDTH__ height=1></td>
</tr>

</table>

</form>


<!-- ----- END REAL STUFF ----- -->
@_UI_STD_FOOTER_@
<!-- page: @@MV_PAGE@@ -->

-- 
Julia Jacobs
Currant Media
407-977-4523
Fax 407-261-0176
http://www.currantmedia.com
Members of The Better Business Bureau
* Multimedia Producers
* Web Design & Development
* 2D/3D Graphics/Animation
* Hosting, domain and e-mail
* E-Commerce ­ check, credit card validation