No dělám v podstatě to samé, jako dělá klasický MarginalCaches, jen grupuju podle State, místo Country
// hlavni funkce modulu
function MarginalCachesInRegion_Run(aPar:TStringList):string;
var
s,sState,sSql,sOrder:string;
i:integer;
aStates,aPom:TStringList;
tab: TSqliteTable;
begin
Result:='';
if(aPar.Values['Title']<>'') then Result:=ProcessCommand('CmdTitle',aPar);
s:=aPar.Values['SortBy']; sOrder:=Fetch(s,'-');
if(sOrder='Finds') then sOrder:=sOrder+' DESC, State';
s:=aPar.Values['State']; sState:=Fetch(s,'-');
if (sState='All') or (sState='Switch') then begin
// pripravime seznam zemi
aStates:=TStringList.Create();
sSql:='SELECT State, count(*) Finds FROM geocache gc'
+' WHERE gc.dtfound>0 and gc.country = "Czechia"'+CONST_SQL_IGNORE_CACHETYPES+SetSqlFilter(aPar);
if(sIgnoreCaches<>'') then sSql:=sSql+' AND gc.id not in ('+sIgnoreCaches+')';
sSql:=sSql+' GROUP BY State ORDER BY '+sOrder;
tab:=Geoget_DB.GetTable(sSql,false);
try
while not tab.eof do begin
aStates.Add(tab.FieldByName['State']);
tab.Next();
end;
finally
tab.Free();
end;
// prepinaci logika
if sState='Switch' then begin
aPom:=TStringList.Create();
try
for i:=0 to aStates.Count-1 do begin
s:=aStates[i];
aPom.Add(s); //text na tlacitko
aPom.Add('i-'+IntToStr(iItem)+'-'+IntToStr(i)); //prepinany element
end;
Result:=Result+OutputSwitchButtons(IntToStr(iItem),aPar.Values['SwitchType'],5,true,aPom);
finally
aPom.Free();
end;
end;
// vystup pro vsechny zeme
for i:=0 to aStates.Count-1 do begin
if sState='Switch' then begin
Result:=Result+'<div id="i-'+IntToStr(iItem)+'-'+IntToStr(i)+'"';
if i<>0 then Result:=Result+' style="display:none;"';
Result:=Result+'>';
end;
aPar.Values['State']:=aStates[i];
Result:=Result+MarginalCachesInRegion_Output(aPar);
if sState='Switch' then Result:=Result+'</div>';
if sState='All' then Result:=Result+'<div style="margin-bottom:25px"></div>';
end;
aStates.Free();
end else begin
Result:=Result+MarginalCachesInRegion_Output(aPar);
end;
end;
Tento příspěvek byl upraven od Shashlick: 02 květen 2018 - 19:33