07-04-2018, 07:19 PM
In een zoektocht naar een dynamische vorm voor keuzelijsten (cfg-cbs) belandde ik al oefenend eerst op een ander station. Het eerste resultaat is een programmaatje dat op vraag de inhoud van een bepaald veld in een bepaalde beeldbank gesorteerd en uniek weer geeft. De items in de lijst worden in de vorm van een weblink gepresenteerd waardoor een zoekopdracht naar de bewuste records kan worden gestart en er eventueel aanpassingen kunnen worden doorgevoerd. Uiteraard moet je voor die correcties geautoriseerd zijn.
Mocht je het willen gebruiken dan opgelet want momenteel staan de namen van de beeldbanken nog "hard" benoemd. Ze zullen dus moeten worden aangepast aan de lokale situatie.
#!/usr/bin/perl
##############################################################################
#### Auteur : Ton van Steenoven
#### Datum : 01-apr-18
#### Bestand : /cgi-bin/sort-uniek.pl
#### Toepassing: Sorteren en uniek maken (lijst) van een bepaald veld
#### Bron voor een dynamische keuzelijst / controlelijst op
#### eenduidige naamgeving om zoekresultaten optimaal te houden.
##############################################################################
require "misc/cgi-lib.pl"; ## locatie cgi-lib module
&ReadParse(*query); ##
$toepassing = $query{"toepassing"};
$kolom = $query{"kolom"};
if ($toepassing =~ /\w+/) { ## is er een zoekwoord?
##require "$toepassing/misc/cfg-cbs.pl"; toekomstige connectie ?#################
### Representatieve naam beeldbanken#################
$bb="";
### Selected optie voor keuzelijst formulier#################
$Sel1 = $Sel2 = $Sel3 = $Sel4 = $Sel5 = "";
### Toekennen optie **selected** aan actuele keuze#################
if ($toepassing eq "beeldbank") {
$bb = "Foto\'s" ;
$Sel1 = "selected";
}
if ($toepassing eq "library") {
$bb = "Boeken" ;
$Sel3 = "selected";
}
if ($toepassing eq "grafstenen") {
$bb="Grafmonumenten";
$Sel2 = "selected";
}
if ($toepassing eq "documenten") {
$bb="Documenten";
$Sel4 = "selected";
}
if ($toepassing eq "objecten") {
$bb="Voorwerpen";
$Sel5 = "selected";
}
### Inoud formulier #################
$FORM_BASE = "<option value\=\"beeldbank\" $Sel1 >Foto\'s</option><option value\=\"grafstenen\" $Sel2 >Grafmonumenten</option><option value\=\"library\" $Sel3 >Boeken</option><option value\=\"documenten\" $Sel4 >Documenten</option><option value\=\"objecten\" $Sel5 >Voorwerpen</option>";
### Technische namen velden zcbs #################
@sysarray = ("\$instelling","\$id2","\$number","\$keyword1","\$keyword2","\$title","\$description","\$author","\$datering","\$material","\$state","\$size","\$fromtype","\$from","\$fromdate","\$place","\$price","\$veld17","\$expo","\$opm","\$transport","\$internet","\$category","\$collectie","\$thema","\$stijl","\$techniek","\$beschrijver","\$extra","\$vergaring","\$vergaring_van","\$vergaring_dat","\$new_date","\$desc_date","\$update_date");
$sysfield = $sysarray[$kolom];
open (INP, "$toepassing/$toepassing.txt") || die print "Can't open $file: $!\n";
my @lines;
################ Maak een array met de gegevens uit de gewenste kolom ####
while (my $line = <INP>) {
chomp($line); # weghalen laatste newline
my @fields = split(/\t/,$line); # split at the separator (tab)
if ($fields[2] == /id2/) {
$veld = "$fields[$kolom]" ;
} else {
$pos = index($fields[$kolom],"|");
if ($pos ne -1){
$newline = substr $fields[$kolom], 0, $pos; # data van gewenste kolom
} else{
$newline = $fields[$kolom]; # data van gewenste kolom
}
push(@lines, $newline); # data line naar nieuwe array
}
}
$Bericht = "Beeldbank $bb / VELD$kolom: $veld" ;
################ Sorteer de nieuwe array alfabetisch/lectografisch #######
@lines = sort(@lines);
################ Maak de regels in nieuwe array uniek ####################
my $uniqline="";
################ Plaats als eerste de optie Maak uw keuze ###############
$i = 1;
$Selection = "";
################ Lees nu elke regel uniek in #############################
foreach my $line (@lines) {
if ($uniqline ne $line) {
$i++ ;
##$line3 = $line;
$link = "$toepassing.pl?search=$line&veld=VELD ". $sysfield . "&inword=1";
$line3 = "<a href=\"$link\" target=\"_blank\">$line</a>";
$Selection .= "<br /> $line3";
$uniqline = $line;
if ($i eq 35){
$Selection .= "</div><div style=\"float: left;padding: 5px;min-heigth:1200px;max-width:18%;\">";
$i = 1;
}
}
}
################ Plaats als laatste de optie Anders #######################
} else{
$Bericht = "Geen keuze gemaakt.";
}
################ Voer de lijst uit #######################################
print ("Content-type: text/html\n\n");
print <<EOR;
<html>
<head>
<title>Gesorteerd en uniek ($kolom)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<button onclick="openWin()">Velden in database: $toepassing</button>
<form class="zoeken" method="POST" action="/cgi-bin/sort-uniek-form.pl">
<!--input type="text" name="toepassing" value="$toepassing" required-->
<SELECT name = "toepassing">
$FORM_BASE
</SELECT>
<SELECT name = "kolom">
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
<option>11</option>
<option>12</option>
<option>13</option>
<option>14</option>
<option>15</option>
<option>16</option>
<option>17</option>
<option>18</option>
<option>19</option>
<option>20</option>
<option>21</option>
<option>22</option>
<option>23</option>
<option>24</option>
<option>25</option>
<option>26</option>
<option>27</option>
<option>28</option>
<option>29</option>
<option>30</option>
<option>31</option>
</SELECT>
<input type="submit" value="OK">
</form><hr />
<div style=\"padding: 5px;">
<strong><h2>$Bericht</h2></strong>
</div>
<!--center><h2>Uniek en gesorteerd: $toepassing - VELD$kolom: $veld</h2></center-->
<div style=\"float: left;padding: 5px;min-heigth:1200px;max-width:18%;\">
$Selection
</div>
<script>
var myWindow;
function openWin() {
myWindow = window.open("$toepassing.pl?misc=53", "_blank", "width=1000, height=180 top=350, left=400");
}
function closeWin() {
myWindow.close();
}
</script>
</body>
</html>
EOR
Mocht je het willen gebruiken dan opgelet want momenteel staan de namen van de beeldbanken nog "hard" benoemd. Ze zullen dus moeten worden aangepast aan de lokale situatie.
#!/usr/bin/perl
##############################################################################
#### Auteur : Ton van Steenoven
#### Datum : 01-apr-18
#### Bestand : /cgi-bin/sort-uniek.pl
#### Toepassing: Sorteren en uniek maken (lijst) van een bepaald veld
#### Bron voor een dynamische keuzelijst / controlelijst op
#### eenduidige naamgeving om zoekresultaten optimaal te houden.
##############################################################################
require "misc/cgi-lib.pl"; ## locatie cgi-lib module
&ReadParse(*query); ##
$toepassing = $query{"toepassing"};
$kolom = $query{"kolom"};
if ($toepassing =~ /\w+/) { ## is er een zoekwoord?
##require "$toepassing/misc/cfg-cbs.pl"; toekomstige connectie ?#################
### Representatieve naam beeldbanken#################
$bb="";
### Selected optie voor keuzelijst formulier#################
$Sel1 = $Sel2 = $Sel3 = $Sel4 = $Sel5 = "";
### Toekennen optie **selected** aan actuele keuze#################
if ($toepassing eq "beeldbank") {
$bb = "Foto\'s" ;
$Sel1 = "selected";
}
if ($toepassing eq "library") {
$bb = "Boeken" ;
$Sel3 = "selected";
}
if ($toepassing eq "grafstenen") {
$bb="Grafmonumenten";
$Sel2 = "selected";
}
if ($toepassing eq "documenten") {
$bb="Documenten";
$Sel4 = "selected";
}
if ($toepassing eq "objecten") {
$bb="Voorwerpen";
$Sel5 = "selected";
}
### Inoud formulier #################
$FORM_BASE = "<option value\=\"beeldbank\" $Sel1 >Foto\'s</option><option value\=\"grafstenen\" $Sel2 >Grafmonumenten</option><option value\=\"library\" $Sel3 >Boeken</option><option value\=\"documenten\" $Sel4 >Documenten</option><option value\=\"objecten\" $Sel5 >Voorwerpen</option>";
### Technische namen velden zcbs #################
@sysarray = ("\$instelling","\$id2","\$number","\$keyword1","\$keyword2","\$title","\$description","\$author","\$datering","\$material","\$state","\$size","\$fromtype","\$from","\$fromdate","\$place","\$price","\$veld17","\$expo","\$opm","\$transport","\$internet","\$category","\$collectie","\$thema","\$stijl","\$techniek","\$beschrijver","\$extra","\$vergaring","\$vergaring_van","\$vergaring_dat","\$new_date","\$desc_date","\$update_date");
$sysfield = $sysarray[$kolom];
open (INP, "$toepassing/$toepassing.txt") || die print "Can't open $file: $!\n";
my @lines;
################ Maak een array met de gegevens uit de gewenste kolom ####
while (my $line = <INP>) {
chomp($line); # weghalen laatste newline
my @fields = split(/\t/,$line); # split at the separator (tab)
if ($fields[2] == /id2/) {
$veld = "$fields[$kolom]" ;
} else {
$pos = index($fields[$kolom],"|");
if ($pos ne -1){
$newline = substr $fields[$kolom], 0, $pos; # data van gewenste kolom
} else{
$newline = $fields[$kolom]; # data van gewenste kolom
}
push(@lines, $newline); # data line naar nieuwe array
}
}
$Bericht = "Beeldbank $bb / VELD$kolom: $veld" ;
################ Sorteer de nieuwe array alfabetisch/lectografisch #######
@lines = sort(@lines);
################ Maak de regels in nieuwe array uniek ####################
my $uniqline="";
################ Plaats als eerste de optie Maak uw keuze ###############
$i = 1;
$Selection = "";
################ Lees nu elke regel uniek in #############################
foreach my $line (@lines) {
if ($uniqline ne $line) {
$i++ ;
##$line3 = $line;
$link = "$toepassing.pl?search=$line&veld=VELD ". $sysfield . "&inword=1";
$line3 = "<a href=\"$link\" target=\"_blank\">$line</a>";
$Selection .= "<br /> $line3";
$uniqline = $line;
if ($i eq 35){
$Selection .= "</div><div style=\"float: left;padding: 5px;min-heigth:1200px;max-width:18%;\">";
$i = 1;
}
}
}
################ Plaats als laatste de optie Anders #######################
} else{
$Bericht = "Geen keuze gemaakt.";
}
################ Voer de lijst uit #######################################
print ("Content-type: text/html\n\n");
print <<EOR;
<html>
<head>
<title>Gesorteerd en uniek ($kolom)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<button onclick="openWin()">Velden in database: $toepassing</button>
<form class="zoeken" method="POST" action="/cgi-bin/sort-uniek-form.pl">
<!--input type="text" name="toepassing" value="$toepassing" required-->
<SELECT name = "toepassing">
$FORM_BASE
</SELECT>
<SELECT name = "kolom">
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>8</option>
<option>9</option>
<option>10</option>
<option>11</option>
<option>12</option>
<option>13</option>
<option>14</option>
<option>15</option>
<option>16</option>
<option>17</option>
<option>18</option>
<option>19</option>
<option>20</option>
<option>21</option>
<option>22</option>
<option>23</option>
<option>24</option>
<option>25</option>
<option>26</option>
<option>27</option>
<option>28</option>
<option>29</option>
<option>30</option>
<option>31</option>
</SELECT>
<input type="submit" value="OK">
</form><hr />
<div style=\"padding: 5px;">
<strong><h2>$Bericht</h2></strong>
</div>
<!--center><h2>Uniek en gesorteerd: $toepassing - VELD$kolom: $veld</h2></center-->
<div style=\"float: left;padding: 5px;min-heigth:1200px;max-width:18%;\">
$Selection
</div>
<script>
var myWindow;
function openWin() {
myWindow = window.open("$toepassing.pl?misc=53", "_blank", "width=1000, height=180 top=350, left=400");
}
function closeWin() {
myWindow.close();
}
</script>
</body>
</html>
EOR
=====================
Ton van Steenoven
Support ZCBS (00)
0626854665
======================================
Als niemand iets te vragen heeft dan zijn er geen problemen==
======================================
Ton van Steenoven
Support ZCBS (00)
0626854665
======================================
Als niemand iets te vragen heeft dan zijn er geen problemen==
======================================

Data inspectietool voor beeldbanken ZCBS
