Liste aller Städte in Deutschland als Array xls, csv

Wem es hilft: Hier eine Liste aller Städte in Deutschland (ca. 2060) – als Array. Fertig zur Verwendung in PHP, JavaScript oder sonstwo.
Viel Spaß!

$cityArray = ['Aach', 'Aachen', 'Aalen', 'Abenberg', 'Abensberg', 'Achern', 'Achim', 'Adelsheim', 'Adenau', 'Adorf/Vogtl.', 'Ahaus', 'Ahlen', 'Ahrensburg', 'Aichach', 'Aichtal', 'Aken (Elbe)', 'Albstadt', 'Alfeld (Leine)', 'Allendorf (Lumda)', 'Allstedt', 'Alpirsbach', 'Alsdorf', 'Alsfeld', 'Alsleben (Saale)', 'Altdorf bei Nürnberg', 'Altena', 'Altenberg', 'Altenburg', 'Altenkirchen (Westerwald)', 'Altensteig', 'Altentreptow', 'Altlandsberg', 'Altötting', 'Alzenau', 'Alzey', 'Amberg', 'Amöneburg', 'Amorbach', 'Andernach', 'Angermünde', 'Anklam', 'Annaberg-Buchholz', 'Annaburg', 'Annweiler am Trifels', 'Ansbach', 'Apolda', 'Arendsee (Altmark)', 'Arneburg', 'Arnis', 'Arnsberg', 'Arnstadt', 'Arnstein', 'Arnstein', 'Artern/Unstrut', 'Arzberg', 'Aschaffenburg', 'Aschersleben', 'Asperg', 'Aßlar', 'Attendorn', 'Aub', 'Aue', 'Auerbach in der Oberpfalz', 'Auerbach/Vogtl.', 'Augsburg', 'Augustusburg', 'Aulendorf', 'Auma-Weidatal', 'Aurich', 'Babenhausen', 'Bacharach', 'Backnang', 'Bad Aibling', 'Bad Arolsen', 'Bad Belzig', 'Bad Bentheim', 'Bad Bergzabern', 'Bad Berka', 'Bad Berleburg', 'Bad Berneck im Fichtelgebirge', 'Bad Bevensen', 'Bad Bibra', 'Bad Blankenburg', 'Bad Bramstedt', 'Bad Breisig', 'Bad Brückenau', 'Bad Buchau', 'Bad Camberg', 'Bad Colberg-Heldburg', 'Bad Doberan', 'Bad Driburg', 'Bad Düben', 'Bad Dürkheim', 'Bad Dürrenberg', 'Bad Dürrheim', 'Bad Elster', 'Bad Ems', 'Baden-Baden', 'Bad Fallingbostel', 'Bad Frankenhausen/Kyffhäuser', 'Bad Freienwalde (Oder)', 'Bad Friedrichshall', 'Bad Gandersheim', 'Bad Gottleuba-Berggießhübel', 'Bad Griesbach im Rottal', 'Bad Harzburg', 'Bad Herrenalb', 'Bad Hersfeld', 'Bad Homburg vor der Höhe', 'Bad Honnef', 'Bad Hönningen', 'Bad Iburg', 'Bad Karlshafen', 'Bad Kissingen', 'Bad König', 'Bad Königshofen im Grabfeld', 'Bad Köstritz', 'Bad Kötzting', 'Bad Kreuznach', 'Bad Krozingen', 'Bad Laasphe', 'Bad Langensalza', 'Bad Lauchstädt', 'Bad Lausick', 'Bad Lauterberg im Harz', 'Bad Liebenstein', 'Bad Liebenwerda', 'Bad Liebenzell', 'Bad Lippspringe', 'Bad Lobenstein', 'Bad Marienberg (Westerwald)', 'Bad Mergentheim', 'Bad Münder am Deister', 'Bad Münstereifel', 'Bad Muskau', 'Bad Nauheim', 'Bad Nenndorf', 'Bad Neuenahr-Ahrweiler', 'Bad Neustadt an der Saale', 'Bad Oeynhausen', 'Bad Oldesloe', 'Bad Orb', 'Bad Pyrmont', 'Bad Rappenau', 'Bad Reichenhall', 'Bad Rodach', 'Bad Sachsa', 'Bad Säckingen', 'Bad Salzdetfurth', 'Bad Salzuflen', 'Bad Salzungen', 'Bad Saulgau', 'Bad Schandau', 'Bad Schmiedeberg', 'Bad Schussenried', 'Bad Schwalbach', 'Bad Schwartau', 'Bad Segeberg', 'Bad Sobernheim', 'Bad Soden am Taunus', 'Bad Soden-Salmünster', 'Bad Sooden-Allendorf', 'Bad Staffelstein', 'Bad Sulza', 'Bad Sülze', 'Bad Teinach-Zavelstein', 'Bad Tennstedt', 'Bad Tölz', 'Bad Urach', 'Bad Vilbel', 'Bad Waldsee', 'Bad Wildbad', 'Bad Wildungen', 'Bad Wilsnack', 'Bad Wimpfen', 'Bad Windsheim', 'Bad Wörishofen', 'Bad Wünnenberg', 'Bad Wurzach', 'Baesweiler', 'Baiersdorf', 'Balingen', 'Ballenstedt', 'Balve', 'Bamberg', 'Barby', 'Bargteheide', 'Barmstedt', 'Bärnau', 'Barntrup', 'Barsinghausen', 'Barth', 'Baruth/Mark', 'Bassum', 'Battenberg (Eder)', 'Baumholder', 'Baunach', 'Baunatal', 'Bautzen', 'Bayreuth', 'Bebra', 'Beckum', 'Bedburg', 'Beelitz', 'Beerfelden', 'Beeskow', 'Beilngries', 'Beilstein', 'Belgern-Schildau', 'Bendorf', 'Bensheim', 'Berching', 'Berga/Elster', 'Bergen', 'Bergen auf Rügen', 'Bergheim', 'Bergisch Gladbach', 'Bergkamen', 'Bergneustadt', 'Berka/Werra', 'Berlin', 'Bernau bei Berlin', 'Bernburg (Saale)', 'Bernkastel-Kues', 'Bernsdorf', 'Bernstadt a. d. Eigen', 'Bersenbrück', 'Besigheim', 'Betzdorf', 'Betzenstein', 'Beverungen', 'Bexbach', 'Biberach an der Riß', 'Biedenkopf', 'Bielefeld', 'Biesenthal', 'Bietigheim-Bissingen', 'Billerbeck', 'Bingen am Rhein', 'Birkenfeld', 'Bischofsheim an der Rhön', 'Bischofswerda', 'Bismark (Altmark)', 'Bitburg', 'Bitterfeld-Wolfen', 'Blankenburg (Harz)', 'Blankenhain', 'Blaubeuren', 'Blaustein', 'Bleckede', 'Bleicherode', 'Blieskastel', 'Blomberg', 'Blumberg', 'Bobingen', 'Böblingen', 'Bocholt', 'Bochum', 'Bockenem', 'Bodenwerder', 'Bogen', 'Böhlen', 'Boizenburg/Elbe', 'Bonn', 'Bonndorf im Schwarzwald', 'Bönnigheim', 'Bopfingen', 'Boppard', 'Borgentreich', 'Borgholzhausen', 'Borken', 'Borken', 'Borkum', 'Borna', 'Bornheim', 'Bottrop', 'Boxberg', 'Brackenheim', 'Brake (Unterweser)', 'Brakel', 'Bramsche', 'Brandenburg an der Havel', 'Brand-Erbisdorf', 'Brandis', 'Braubach', 'Braunfels', 'Braunlage', 'Bräunlingen', 'Braunsbedra', 'Braunschweig', 'Breckerfeld', 'Bredstedt', 'Breisach am Rhein', 'Bremen', 'Bremerhaven', 'Bremervörde', 'Bretten', 'Breuberg', 'Brilon', 'Brotterode-Trusetal', 'Bruchköbel', 'Bruchsal', 'Brück', 'Brüel', 'Brühl', 'Brunsbüttel', 'Brüssow', 'Buchen (Odenwald)', 'Buchholz in der Nordheide', 'Buchloe', 'Bückeburg', 'Buckow (Märkische Schweiz)', 'Büdelsdorf', 'Büdingen', 'Bühl', 'Bünde', 'Büren', 'Burg', 'Burgau', 'Burgbernheim', 'Burgdorf', 'Bürgel', 'Burghausen', 'Burgkunstadt', 'Burglengenfeld', 'Burgstädt', 'Burg Stargard', 'Burgwedel', 'Burladingen', 'Burscheid', 'Bürstadt', 'Buttelstedt', 'Buttstädt', 'Butzbach', 'Bützow', 'Buxtehude', 'Calau', 'Calbe (Saale)', 'Calw', 'Castrop-Rauxel', 'Celle', 'Cham', 'Chemnitz', 'Clausthal-Zellerfeld', 'Clingen', 'Cloppenburg', 'Coburg', 'Cochem', 'Coesfeld', 'Colditz', 'Coswig', 'Coswig (Anhalt)', 'Cottbus', 'Crailsheim', 'Creglingen', 'Creußen', 'Creuzburg', 'Crimmitschau', 'Crivitz', 'Cuxhaven', 'Dachau', 'Dahlen', 'Dahme/Mark', 'Dahn', 'Damme', 'Dannenberg (Elbe)', 'Dargun', 'Darmstadt', 'Dassel', 'Dassow', 'Datteln', 'Daun', 'Deggendorf', 'Deidesheim', 'Delbrück', 'Delitzsch', 'Delmenhorst', 'Demmin', 'Dessau-Roßlau', 'Detmold', 'Dettelbach', 'Dieburg', 'Diemelstadt', 'Diepholz', 'Dierdorf', 'Dietenheim', 'Dietfurt an der Altmühl', 'Dietzenbach', 'Diez', 'Dillenburg', 'Dillingen an der Donau', 'Dillingen/Saar', 'Dingelstädt', 'Dingolfing', 'Dinkelsbühl', 'Dinklage', 'Dinslaken', 'Dippoldiswalde', 'Dissen am Teutoburger Wald', 'Ditzingen', 'Döbeln', 'Doberlug-Kirchhain', 'Döbern', 'Dohna', 'Dömitz', 'Dommitzsch', 'Donaueschingen', 'Donauwörth', 'Donzdorf', 'Dorfen', 'Dormagen', 'Dornburg-Camburg', 'Dornhan', 'Dornstetten', 'Dorsten', 'Dortmund', 'Dransfeld', 'Drebkau', 'Dreieich', 'Drensteinfurt', 'Dresden', 'Drolshagen', 'Duderstadt', 'Duisburg', 'Dülmen', 'Düren', 'Düsseldorf', 'Ebeleben', 'Eberbach', 'Ebermannstadt', 'Ebern', 'Ebersbach an der Fils', 'Ebersbach-Neugersdorf', 'Ebersberg', 'Eberswalde', 'Eckartsberga', 'Eckernförde', 'Edenkoben', 'Egeln', 'Eggenfelden', 'Eggesin', 'Ehingen (Donau)', 'Ehrenfriedersdorf', 'Eibelstadt', 'Eibenstock', 'Eichstätt', 'Eilenburg', 'Einbeck', 'Eisenach', 'Eisenberg', 'Eisenberg (Pfalz)', 'Eisenhüttenstadt', 'Eisfeld', 'Eisleben', 'Eislingen/Fils', 'Ellingen', 'Ellrich', 'Ellwangen (Jagst)', 'Elmshorn', 'Elsdorf', 'Elsfleth', 'Elsterberg', 'Elsterwerda', 'Elstra', 'Elterlein', 'Eltmann', 'Eltville am Rhein', 'Elzach', 'Elze', 'Emden', 'Emmelshausen', 'Emmendingen', 'Emmerich am Rhein', 'Emsdetten', 'Endingen am Kaiserstuhl', 'Engen', 'Enger', 'Ennepetal', 'Ennigerloh', 'Eppelheim', 'Eppingen', 'Eppstein', 'Erbach', 'Erbach (Odenwald)', 'Erbendorf', 'Erding', 'Erftstadt', 'Erfurt', 'Erkelenz', 'Erkner', 'Erkrath', 'Erlangen', 'Erlenbach am Main', 'Erlensee', 'Erwitte', 'Eschborn', 'Eschenbach in der Oberpfalz', 'Eschershausen', 'Eschwege', 'Eschweiler', 'Esens', 'Espelkamp', 'Essen', 'Esslingen am Neckar', 'Ettenheim', 'Ettlingen', 'Euskirchen', 'Eutin', 'Falkenberg/Elster', 'Falkensee', 'Falkenstein/Harz', 'Falkenstein/Vogtl.', 'Fehmarn', 'Fellbach', 'Felsberg', 'Feuchtwangen', 'Filderstadt', 'Finsterwalde', 'Fladungen', 'Flensburg', 'Flöha', 'Flörsheim am Main', 'Florstadt', 'Forchheim', 'Forchtenberg', 'Forst (Lausitz)', 'Frankenau', 'Frankenberg (Eder)', 'Frankenberg/Sa.', 'Frankenthal (Pfalz)', 'Frankfurt am Main', 'Frankfurt (Oder)', 'Franzburg', 'Frauenstein', 'Frechen', 'Freiberg am Neckar', 'Freiberg', 'Freiburg im Breisgau', 'Freilassing', 'Freinsheim', 'Freising', 'Freital', 'Freren', 'Freudenberg', 'Freudenberg', 'Freudenstadt', 'Freyburg (Unstrut)', 'Freystadt', 'Freyung', 'Fridingen an der Donau', 'Friedberg', 'Friedberg', 'Friedland', 'Friedland', 'Friedrichroda', 'Friedrichsdorf', 'Friedrichshafen', 'Friedrichstadt', 'Friedrichsthal', 'Friesack', 'Friesoythe', 'Fritzlar', 'Frohburg', 'Fröndenberg/Ruhr', 'Fulda', 'Fürstenau', 'Fürstenberg/Havel', 'Fürstenfeldbruck', 'Fürstenwalde/Spree', 'Fürth', 'Furth im Wald', 'Furtwangen im Schwarzwald', 'Füssen', 'Gadebusch', 'Gaggenau', 'Gaildorf', 'Gammertingen', 'Garbsen', 'Garching bei München', 'Gardelegen', 'Garding', 'Gartz (Oder)', 'Garz/Rügen', 'Gau-Algesheim', 'Gebesee', 'Gedern', 'Geesthacht', 'Geestland', 'Gefell', 'Gefrees', 'Gehrden', 'Gehren', 'Geilenkirchen', 'Geisa', 'Geiselhöring', 'Geisenfeld', 'Geisenheim', 'Geisingen', 'Geislingen', 'Geislingen an der Steige', 'Geithain', 'Geldern', 'Gelnhausen', 'Gelsenkirchen', 'Gemünden am Main', 'Gemünden (Wohra)', 'Gengenbach', 'Genthin', 'Georgsmarienhütte', 'Gera', 'Gerabronn', 'Gerbstedt', 'Geretsried', 'Geringswalde', 'Gerlingen', 'Germering', 'Germersheim', 'Gernsbach', 'Gernsheim', 'Gerolstein', 'Gerolzhofen', 'Gersfeld (Rhön)', 'Gersthofen', 'Gescher', 'Geseke', 'Gevelsberg', 'Geyer', 'Giengen an der Brenz', 'Gießen', 'Gifhorn', 'Ginsheim-Gustavsburg', 'Gladbeck', 'Gladenbach', 'Glashütte', 'Glauchau', 'Glinde', 'Glücksburg (Ostsee)', 'Glückstadt', 'Gnoien', 'Goch', 'Goldberg', 'Goldkronach', 'Golßen', 'Gommern', 'Göppingen', 'Görlitz', 'Goslar', 'Gößnitz', 'Gotha', 'Göttingen', 'Grabow', 'Grafenau', 'Gräfenberg', 'Gräfenhainichen', 'Gräfenthal', 'Grafenwöhr', 'Grafing bei München', 'Gransee', 'Grebenau', 'Grebenstein', 'Greding', 'Greifswald', 'Greiz', 'Greußen', 'Greven', 'Grevenbroich', 'Grevesmühlen', 'Griesheim', 'Grimma', 'Grimmen', 'Gröditz', 'Groitzsch', 'Gronau (Leine)', 'Gronau (Westf.)', 'Gröningen', 'Großalmerode', 'Groß-Bieberau', 'Großbottwar', 'Großbreitenbach', 'Großenehrich', 'Großenhain', 'Groß-Gerau', 'Großräschen', 'Großröhrsdorf', 'Großschirma', 'Groß-Umstadt', 'Grünberg', 'Grünhain-Beierfeld', 'Grünsfeld', 'Grünstadt', 'Guben', 'Gudensberg', 'Güglingen', 'Gummersbach', 'Gundelfingen an der Donau', 'Gundelsheim', 'Günzburg', 'Gunzenhausen', 'Güsten', 'Güstrow', 'Gütersloh', 'Gützkow', 'Haan', 'Hachenburg', 'Hadamar', 'Hagen', 'Hagenbach', 'Hagenow', 'Haiger', 'Haigerloch', 'Hainichen', 'Haiterbach', 'Halberstadt', 'Haldensleben', 'Halle (Saale)', 'Halle (Westf.)', 'Hallenberg', 'Hallstadt', 'Haltern am See', 'Halver', 'Hamburg', 'Hameln', 'Hamm', 'Hammelburg', 'Hamminkeln', 'Hanau', 'Hannover', 'Hann. Münden', 'Harburg (Schwaben)', 'Hardegsen', 'Haren (Ems)', 'Harsewinkel', 'Hartenstein', 'Hartha', 'Harzgerode', 'Haselünne', 'Haslach im Kinzigtal', 'Haßfurt', 'Hattersheim am Main', 'Hattingen', 'Hatzfeld (Eder)', 'Hausach', 'Hauzenberg', 'Havelberg', 'Havelsee', 'Hayingen', 'Hechingen', 'Hecklingen', 'Heide', 'Heideck', 'Heidelberg', 'Heidenau', 'Heidenheim an der Brenz', 'Heilbad Heiligenstadt', 'Heilbronn', 'Heiligenhafen', 'Heiligenhaus', 'Heilsbronn', 'Heimbach', 'Heimsheim', 'Heinsberg', 'Heitersheim', 'Heldrungen', 'Helmbrechts', 'Helmstedt', 'Hemau', 'Hemer', 'Hemmingen', 'Hemmoor', 'Hemsbach', 'Hennef (Sieg)', 'Hennigsdorf', 'Heppenheim (Bergstraße)', 'Herbolzheim', 'Herborn', 'Herbrechtingen', 'Herbstein', 'Herdecke', 'Herdorf', 'Herford', 'Heringen/Helme', 'Heringen (Werra)', 'Hermeskeil', 'Hermsdorf', 'Herne', 'Herrenberg', 'Herrieden', 'Herrnhut', 'Hersbruck', 'Herten', 'Herzberg am Harz', 'Herzberg (Elster)', 'Herzogenaurach', 'Herzogenrath', 'Hessisch Lichtenau', 'Hessisch Oldendorf', 'Hettingen', 'Hettstedt', 'Heubach', 'Heusenstamm', 'Hilchenbach', 'Hildburghausen', 'Hilden', 'Hildesheim', 'Hillesheim', 'Hilpoltstein', 'Hirschau', 'Hirschberg', 'Hirschhorn (Neckar)', 'Hitzacker (Elbe)', 'Hochheim am Main', 'Höchstadt an der Aisch', 'Höchstädt an der Donau', 'Hockenheim', 'Hof', 'Hofgeismar', 'Hofheim am Taunus', 'Hofheim in Unterfranken', 'Hohenberg an der Eger', 'Hohenleuben', 'Hohenmölsen', 'Hohen Neuendorf', 'Hohenstein-Ernstthal', 'Hohnstein', 'Höhr-Grenzhausen', 'Hollfeld', 'Holzgerlingen', 'Holzminden', 'Homberg (Efze)', 'Homberg (Ohm)', 'Homburg', 'Horb am Neckar', 'Hornbach', 'Horn-Bad Meinberg', 'Hornberg', 'Hörstel', 'Horstmar', 'Höxter', 'Hoya', 'Hoyerswerda', 'Hückelhoven', 'Hückeswagen', 'Hüfingen', 'Hünfeld', 'Hungen', 'Hürth', 'Husum', 'Ibbenbüren', 'Ichenhausen', 'Idar-Oberstein', 'Idstein', 'Illertissen', 'Ilmenau', 'Ilsenburg (Harz)', 'Ilshofen', 'Immenhausen', 'Immenstadt im Allgäu', 'Ingelfingen', 'Ingelheim am Rhein', 'Ingolstadt', 'Iphofen', 'Iserlohn', 'Isny im Allgäu', 'Isselburg', 'Itzehoe', 'Jarmen', 'Jena', 'Jerichow', 'Jessen (Elster)', 'Jever', 'Joachimsthal', 'Johanngeorgenstadt', 'Jöhstadt', 'Jülich', 'Jüterbog', 'Kaarst', 'Kahla', 'Kaisersesch', 'Kaiserslautern', 'Kalbe (Milde)', 'Kalkar', 'Kaltenkirchen', 'Kaltennordheim', 'Kamen', 'Kamenz', 'Kamp-Lintfort', 'Kandel', 'Kandern', 'Kappeln', 'Karben', 'Karlsruhe', 'Karlstadt', 'Kassel', 'Kastellaun', 'Katzenelnbogen', 'Kaub', 'Kaufbeuren', 'Kehl', 'Kelbra (Kyffhäuser)', 'Kelheim', 'Kelkheim (Taunus)', 'Kellinghusen', 'Kelsterbach', 'Kemberg', 'Kemnath', 'Kempen', 'Kempten (Allgäu)', 'Kenzingen', 'Kerpen', 'Ketzin/Havel', 'Kevelaer', 'Kiel', 'Kierspe', 'Kindelbrück', 'Kirchberg', 'Kirchberg an der Jagst', 'Kirchberg (Hunsrück)', 'Kirchen (Sieg)', 'Kirchenlamitz', 'Kirchhain', 'Kirchheimbolanden', 'Kirchheim unter Teck', 'Kirn', 'Kirtorf', 'Kitzingen', 'Kitzscher', 'Kleve', 'Klingenberg am Main', 'Klingenthal', 'Klötze', 'Klütz', 'Knittlingen', 'Koblenz', 'Kohren-Sahlis', 'Kolbermoor', 'Kölleda', 'Köln', 'Königsberg in Bayern', 'Königsbrück', 'Königsbrunn', 'Königsee-Rottenbach', 'Königslutter am Elm', 'Königstein im Taunus', 'Königstein (Sächsische Schweiz)', 'Königswinter', 'Königs Wusterhausen', 'Könnern', 'Konstanz', 'Konz', 'Korbach', 'Korntal-Münchingen', 'Kornwestheim', 'Korschenbroich', 'Köthen (Anhalt)', 'Kraichtal', 'Krakow am See', 'Kranichfeld', 'Krautheim', 'Krefeld', 'Kremmen', 'Krempe', 'Kreuztal', 'Kronach', 'Kronberg im Taunus', 'Kröpelin', 'Kroppenstedt', 'Krumbach (Schwaben)', 'Kühlungsborn', 'Kulmbach', 'Külsheim', 'Künzelsau', 'Kupferberg', 'Kuppenheim', 'Kusel', 'Kyllburg', 'Kyritz', 'Laage', 'Laatzen', 'Ladenburg', 'Lage', 'Lahnstein', 'Lahr/Schwarzwald', 'Laichingen', 'Lambrecht (Pfalz)', 'Lampertheim', 'Landau an der Isar', 'Landau in der Pfalz', 'Landsberg am Lech', 'Landsberg', 'Landshut', 'Landstuhl', 'Langelsheim', 'Langen', 'Langenau', 'Langenburg', 'Langenfeld (Rheinland)', 'Langenhagen', 'Langenselbold', 'Langenzenn', 'Langewiesen', 'Lassan', 'Laubach', 'Laucha an der Unstrut', 'Lauchhammer', 'Lauchheim', 'Lauda-Königshofen', 'Lauenburg/Elbe', 'Lauf an der Pegnitz', 'Laufen', 'Laufenburg (Baden)', 'Lauffen am Neckar', 'Lauingen (Donau)', 'Laupheim', 'Lauscha', 'Lauta', 'Lauter-Bernsbach', 'Lauterbach', 'Lauterecken', 'Lauterstein', 'Lebach', 'Lebus', 'Leer (Ostfriesland)', 'Lehesten', 'Lehrte', 'Leichlingen (Rheinland)', 'Leimen', 'Leinefelde-Worbis', 'Leinfelden-Echterdingen', 'Leipheim', 'Leipzig', 'Leisnig', 'Lemgo', 'Lengenfeld', 'Lengerich', 'Lennestadt', 'Lenzen', 'Leonberg', 'Leun', 'Leuna', 'Leutenberg', 'Leutershausen', 'Leutkirch im Allgäu', 'Leverkusen', 'Lich', 'Lichtenau', 'Lichtenau', 'Lichtenberg', 'Lichtenfels', 'Lichtenfels', 'Lichtenstein/Sa.', 'Liebenau', 'Liebenwalde', 'Lieberose', 'Liebstadt', 'Limbach-Oberfrohna', 'Limburg an der Lahn', 'Lindau (Bodensee)', 'Linden', 'Lindenberg im Allgäu', 'Lindenfels', 'Lindow (Mark)', 'Lingen (Ems)', 'Linnich', 'Linz am Rhein', 'Lippstadt', 'Löbau', 'Löffingen', 'Lohmar', 'Lohne (Oldenburg)', 'Löhne', 'Lohr am Main', 'Loitz', 'Lollar', 'Lommatzsch', 'Löningen', 'Lorch', 'Lorch', 'Lörrach', 'Lorsch', 'Lößnitz', 'Löwenstein', 'Lübbecke', 'Lübben (Spreewald)', 'Lübbenau/Spreewald', 'Lübeck', 'Lübtheen', 'Lübz', 'Lüchow (Wendland)', 'Lucka', 'Luckau', 'Luckenwalde', 'Lüdenscheid', 'Lüdinghausen', 'Ludwigsburg', 'Ludwigsfelde', 'Ludwigshafen am Rhein', 'Ludwigslust', 'Ludwigsstadt', 'Lugau', 'Lügde', 'Lüneburg', 'Lünen', 'Lunzenau', 'Lütjenburg', 'Lützen', 'Lychen', 'Magdala', 'Magdeburg', 'Mahlberg', 'Mainbernheim', 'Mainburg', 'Maintal', 'Mainz', 'Malchin', 'Malchow', 'Mannheim', 'Manderscheid', 'Mansfeld', 'Marbach am Neckar', 'Marburg', 'Marienberg', 'Marienmünster', 'Markdorf', 'Markgröningen', 'Märkisch Buchholz', 'Markkleeberg', 'Markneukirchen', 'Markranstädt', 'Marktbreit', 'Marktheidenfeld', 'Marktleuthen', 'Marktoberdorf', 'Marktredwitz', 'Marktsteft', 'Marl', 'Marlow', 'Marne', 'Marsberg', 'Maulbronn', 'Maxhütte-Haidhof', 'Mayen', 'Mechernich', 'Meckenheim', 'Medebach', 'Meerane', 'Meerbusch', 'Meersburg', 'Meinerzhagen', 'Meiningen', 'Meisenheim', 'Meißen', 'Meldorf', 'Melle', 'Mellrichstadt', 'Melsungen', 'Memmingen', 'Menden (Sauerland)', 'Mendig', 'Mengen', 'Meppen', 'Merkendorf', 'Merseburg', 'Merzig', 'Meschede', 'Meßkirch', 'Meßstetten', 'Mettmann', 'Metzingen', 'Meuselwitz', 'Meyenburg', 'Michelstadt', 'Miesbach', 'Miltenberg', 'Mindelheim', 'Minden', 'Mirow', 'Mittenwalde', 'Mitterteich', 'Mittweida', 'Möckern', 'Möckmühl', 'Moers', 'Mölln', 'Mönchengladbach', 'Monheim am Rhein', 'Monheim', 'Monschau', 'Montabaur', 'Moosburg an der Isar', 'Mörfelden-Walldorf', 'Moringen', 'Mosbach', 'Mössingen', 'Mücheln (Geiseltal)', 'Mügeln', 'Mühlacker', 'Mühlberg/Elbe', 'Mühldorf am Inn', 'Mühlhausen/Thüringen', 'Mühlheim am Main', 'Mühlheim an der Donau', 'Mülheim an der Ruhr', 'Mülheim-Kärlich', 'Müllheim', 'Müllrose', 'Münchberg', 'Müncheberg', 'München', 'Münchenbernsdorf', 'Munderkingen', 'Münnerstadt', 'Münsingen', 'Munster', 'Münster', 'Münstermaifeld', 'Münzenberg', 'Murrhardt', 'Nabburg', 'Nagold', 'Naila', 'Nassau', 'Nastätten', 'Nauen', 'Naumburg', 'Naumburg (Saale)', 'Naunhof', 'Nebra (Unstrut)', 'Neckarbischofsheim', 'Neckargemünd', 'Neckarsteinach', 'Neckarsulm', 'Neresheim', 'Netphen', 'Nettetal', 'Netzschkau', 'Neu-Anspach', 'Neubrandenburg', 'Neubukow', 'Neubulach', 'Neuburg an der Donau', 'Neudenau', 'Neuenbürg', 'Neuenburg am Rhein', 'Neuenhaus', 'Neuenrade', 'Neuenstadt am Kocher', 'Neuenstein', 'Neuerburg', 'Neuffen', 'Neuhaus am Rennweg', 'Neu-Isenburg', 'Neukalen', 'Neukirchen', 'Neukirchen-Vluyn', 'Neukloster', 'Neumark', 'Neumarkt in der Oberpfalz', 'Neumarkt-Sankt Veit', 'Neumünster', 'Neunburg vorm Wald', 'Neunkirchen', 'Neuötting', 'Neuruppin', 'Neusalza-Spremberg', 'Neusäß', 'Neuss', 'Neustadt an der Aisch', 'Neustadt an der Donau', 'Neustadt an der Waldnaab', 'Neustadt am Kulm', 'Neustadt am Rübenberge', 'Neustadt an der Orla', 'Neustadt an der Weinstraße', 'Neustadt bei Coburg', 'Neustadt (Dosse)', 'Neustadt-Glewe', 'Neustadt', 'Neustadt in Holstein', 'Neustadt in Sachsen', 'Neustrelitz', 'Neutraubling', 'Neu-Ulm', 'Neuwied', 'Nidda', 'Niddatal', 'Nidderau', 'Nideggen', 'Niebüll', 'Niedenstein', 'Niederkassel', 'Niedernhall', 'Nieder-Olm', 'Niederstetten', 'Niederstotzingen', 'Nieheim', 'Niemegk', 'Nienburg (Saale)', 'Nienburg/Weser', 'Nierstein', 'Niesky', 'Nittenau', 'Norden', 'Nordenham', 'Norderney', 'Norderstedt', 'Nordhausen', 'Nordhorn', 'Nördlingen', 'Northeim', 'Nortorf', 'Nossen', 'Nürnberg', 'Nürtingen', 'Oberasbach', 'Oberharz am Brocken', 'Oberhausen', 'Oberhof', 'Oberkirch', 'Oberkochen', 'Oberlungwitz', 'Obermoschel', 'Obernburg am Main', 'Oberndorf am Neckar', 'Obernkirchen', 'Ober-Ramstadt', 'Oberriexingen', 'Obertshausen', 'Oberursel (Taunus)', 'Oberviechtach', 'Oberweißbach/Thür. Wald', 'Oberwesel', 'Oberwiesenthal', 'Ochsenfurt', 'Ochsenhausen', 'Ochtrup', 'Oderberg', 'Oebisfelde-Weferlingen', 'Oederan', 'Oelde', 'Oelsnitz/Erzgeb.', 'Oelsnitz/Vogtl.', 'Oer-Erkenschwick', 'Oerlinghausen', 'Oestrich-Winkel', 'Oettingen in Bayern', 'Offenbach am Main', 'Offenburg', 'Ohrdruf', 'Öhringen', 'Olbernhau', 'Olching', 'Oldenburg (Oldb)', 'Oldenburg in Holstein', 'Olfen', 'Olpe', 'Olsberg', 'Oppenau', 'Oppenheim', 'Oranienbaum-Wörlitz', 'Oranienburg', 'Orlamünde', 'Ornbau', 'Ortenberg', 'Ortrand', 'Oschatz', 'Oschersleben (Bode)', 'Osnabrück', 'Osterburg (Altmark)', 'Osterburken', 'Osterfeld', 'Osterhofen', 'Osterholz-Scharmbeck', 'Osterode am Harz', 'Osterwieck', 'Ostfildern', 'Ostheim vor der Rhön', 'Osthofen', 'Östringen', 'Ostritz', 'Otterberg', 'Otterndorf', 'Ottweiler', 'Overath', 'Owen', 'Paderborn', 'Papenburg', 'Pappenheim', 'Parchim', 'Parsberg', 'Pasewalk', 'Passau', 'Pattensen', 'Pausa-Mühltroff', 'Pegau', 'Pegnitz', 'Peine', 'Peitz', 'Penig', 'Penkun', 'Penzberg', 'Penzlin', 'Perleberg', 'Petershagen', 'Pfaffenhofen an der Ilm', 'Pfarrkirchen', 'Pforzheim', 'Pfreimd', 'Pfullendorf', 'Pfullingen', 'Pfungstadt', 'Philippsburg', 'Pinneberg', 'Pirmasens', 'Pirna', 'Plattling', 'Plau am See', 'Plaue', 'Plauen', 'Plettenberg', 'Pleystein', 'Plochingen', 'Plön', 'Pockau-Lengefeld', 'Pocking', 'Pohlheim', 'Polch', 'Porta Westfalica', 'Pößneck', 'Potsdam', 'Pottenstein', 'Preetz', 'Premnitz', 'Prenzlau', 'Pressath', 'Preußisch Oldendorf', 'Prichsenstadt', 'Pritzwalk', 'Prüm', 'Puchheim', 'Pulheim', 'Pulsnitz', 'Putbus', 'Putlitz', 'Püttlingen', 'Quakenbrück', 'Quedlinburg', 'Querfurt', 'Quickborn', 'Rabenau', 'Radeberg', 'Radebeul', 'Radeburg', 'Radevormwald', 'Radolfzell am Bodensee', 'Raguhn-Jeßnitz', 'Rahden', 'Rain', 'Ramstein-Miesenbach', 'Ranis', 'Ransbach-Baumbach', 'Rastatt', 'Rastenberg', 'Rathenow', 'Ratingen', 'Ratzeburg', 'Rauenberg', 'Raunheim', 'Rauschenberg', 'Ravensburg', 'Ravenstein', 'Recklinghausen', 'Rees', 'Regen', 'Regensburg', 'Regis-Breitingen', 'Rehau', 'Rehburg-Loccum', 'Rehna', 'Reichelsheim (Wetterau)', 'Reichenbach im Vogtland', 'Reichenbach/O.L.', 'Reinbek', 'Reinfeld (Holstein)', 'Reinheim', 'Remagen', 'Remda-Teichel', 'Remscheid', 'Remseck am Neckar', 'Renchen', 'Rendsburg', 'Rennerod', 'Renningen', 'Rerik', 'Rethem (Aller)', 'Reutlingen', 'Rheda-Wiedenbrück', 'Rhede', 'Rheinau', 'Rheinbach', 'Rheinberg', 'Rheinböllen', 'Rheine', 'Rheinfelden (Baden)', 'Rheinsberg', 'Rheinstetten', 'Rhens', 'Rhinow', 'Ribnitz-Damgarten', 'Richtenberg', 'Riedenburg', 'Riedlingen', 'Riedstadt', 'Rieneck', 'Riesa', 'Rietberg', 'Rinteln', 'Röbel/Müritz', 'Rochlitz', 'Rockenhausen', 'Rodalben', 'Rodenberg', 'Rödental', 'Rödermark', 'Rodewisch', 'Rodgau', 'Roding', 'Römhild', 'Romrod', 'Ronneburg', 'Ronnenberg', 'Rosbach vor der Höhe', 'Rosenfeld', 'Rosenheim', 'Rosenthal', 'Rösrath', 'Roßleben', 'Roßwein', 'Rostock', 'Rotenburg an der Fulda', 'Rotenburg (Wümme)', 'Roth', 'Rötha', 'Röthenbach an der Pegnitz', 'Rothenburg/O.L.', 'Rothenburg ob der Tauber', 'Rothenfels', 'Rottenburg am Neckar', 'Rottenburg a.d.Laaber', 'Röttingen', 'Rottweil', 'Rötz', 'Rüdesheim am Rhein', 'Rudolstadt', 'Ruhla', 'Ruhland', 'Runkel', 'Rüsselsheim am Main', 'Rutesheim', 'Rüthen', 'Saalburg-Ebersdorf', 'Saalfeld/Saale', 'Saarbrücken', 'Saarburg', 'Saarlouis', 'Sachsenhagen', 'Sachsenheim', 'Salzgitter', 'Salzkotten', 'Salzwedel', 'Sandau (Elbe)', 'Sandersdorf-Brehna', 'Sangerhausen', 'Sankt Augustin', 'Sankt Goar', 'Sankt Goarshausen', 'Sarstedt', 'Sassenberg', 'Sassnitz', 'Sayda', 'Schalkau', 'Schauenstein', 'Scheer', 'Scheibenberg', 'Scheinfeld', 'Schelklingen', 'Schenefeld', 'Scheßlitz', 'Schieder-Schwalenberg', 'Schifferstadt', 'Schillingsfürst', 'Schiltach', 'Schirgiswalde-Kirschau', 'Schkeuditz', 'Schkölen', 'Schleiden', 'Schleiz', 'Schleswig', 'Schlettau', 'Schleusingen', 'Schlieben', 'Schlitz', 'Schloß Holte-Stukenbrock', 'Schlotheim', 'Schlüchtern', 'Schlüsselfeld', 'Schmalkalden', 'Schmallenberg', 'Schmölln', 'Schnackenburg', 'Schnaittenbach', 'Schneeberg', 'Schneverdingen', 'Schömberg', 'Schönau', 'Schönau im Schwarzwald', 'Schönberg', 'Schönebeck (Elbe)', 'Schöneck/Vogtl.', 'Schönewalde', 'Schongau', 'Schöningen', 'Schönsee', 'Schönwald', 'Schopfheim', 'Schöppenstedt', 'Schorndorf', 'Schortens', 'Schotten', 'Schramberg', 'Schraplau', 'Schriesheim', 'Schrobenhausen', 'Schrozberg', 'Schüttorf', 'Schwaan', 'Schwabach', 'Schwäbisch Gmünd', 'Schwäbisch Hall', 'Schwabmünchen', 'Schwaigern', 'Schwalbach am Taunus', 'Schwalmstadt', 'Schwandorf', 'Schwanebeck', 'Schwarzenbach am Wald', 'Schwarzenbach an der Saale', 'Schwarzenbek', 'Schwarzenberg/Erzgeb.', 'Schwarzenborn', 'Schwarzheide', 'Schwedt/Oder', 'Schweich', 'Schweinfurt', 'Schwelm', 'Schwentinental', 'Schwerin', 'Schwerte', 'Schwetzingen', 'Sebnitz', 'Seehausen (Altmark)', 'Seeland', 'Seelow', 'Seelze', 'Seesen', 'Sehnde', 'Seifhennersdorf', 'Selb', 'Selbitz', 'Seligenstadt', 'Selm', 'Selters (Westerwald)', 'Senden', 'Sendenhorst', 'Senftenberg', 'Seßlach', 'Siegburg', 'Siegen', 'Sigmaringen', 'Simbach am Inn', 'Simmern/Hunsrück', 'Sindelfingen', 'Singen (Hohentwiel)', 'Sinsheim', 'Sinzig', 'Soest', 'Solingen', 'Solms', 'Soltau', 'Sömmerda', 'Sondershausen', 'Sonneberg', 'Sonnewalde', 'Sonthofen', 'Sontra', 'Spaichingen', 'Spalt', 'Spangenberg', 'Speicher (Eifel)', 'Spenge', 'Speyer', 'Spremberg', 'Springe', 'Sprockhövel', 'Stade', 'Stadtallendorf', 'Stadtbergen', 'Stadthagen', 'Stadtilm', 'Stadtlengsfeld', 'Stadtlohn', 'Stadtoldendorf', 'Stadtprozelten', 'Stadtroda', 'Stadtsteinach', 'Stadt Wehlen', 'Starnberg', 'Staßfurt', 'Staufen im Breisgau', 'Staufenberg', 'Stavenhagen', 'St. Blasien', 'Stein', 'Steinach', 'Steinau an der Straße', 'Steinbach-Hallenberg', 'Steinbach (Taunus)', 'Steinfurt', 'Steinheim an der Murr', 'Steinheim', 'Stendal', 'Sternberg', 'St. Ingbert', 'St. Georgen im Schwarzwald', 'Stockach', 'Stolberg (Rheinland)', 'Stollberg/Erzgeb.', 'Stolpen', 'Storkow (Mark)', 'Stößen', 'Straelen', 'Stralsund', 'Strasburg (Uckermark)', 'Straubing', 'Strausberg', 'Strehla', 'Stromberg', 'Stühlingen', 'Stutensee', 'Stuttgart', 'St. Wendel', 'Suhl', 'Sulingen', 'Sulz am Neckar', 'Sulzbach/Saar', 'Sulzbach-Rosenberg', 'Sulzburg', 'Sundern (Sauerland)', 'Südliches Anhalt', 'Süßen', 'Syke', 'Tambach-Dietharz', 'Tangerhütte', 'Tangermünde', 'Tann (Rhön)', 'Tanna', 'Tauberbischofsheim', 'Taucha', 'Taunusstein', 'Tecklenburg', 'Tegernsee', 'Telgte', 'Teltow', 'Templin', 'Tengen', 'Tessin', 'Teterow', 'Tettnang', 'Teublitz', 'Teuchern', 'Teupitz', 'Teuschnitz', 'Thale', 'Thalheim/Erzgeb.', 'Thannhausen', 'Tharandt', 'Themar', 'Thum', 'Tirschenreuth', 'Titisee-Neustadt', 'Tittmoning', 'Todtnau', 'Töging am Inn', 'Tönisvorst', 'Tönning', 'Torgau', 'Torgelow', 'Tornesch', 'Traben-Trarbach', 'Traunreut', 'Traunstein', 'Trebbin', 'Trebsen/Mulde', 'Treffurt', 'Trendelburg', 'Treuchtlingen', 'Treuen', 'Treuenbrietzen', 'Triberg im Schwarzwald', 'Tribsees', 'Trier', 'Triptis', 'Trochtelfingen', 'Troisdorf', 'Trossingen', 'Trostberg', 'Tübingen', 'Tuttlingen', 'Twistringen', 'Übach-Palenberg', 'Überlingen', 'Uebigau-Wahrenbrück', 'Ueckermünde', 'Uelzen', 'Uetersen', 'Uffenheim', 'Uhingen', 'Ulm', 'Ulmen', 'Ulrichstein', 'Ummerstadt', 'Unkel', 'Unna', 'Unterschleißheim', 'Usedom', 'Usingen', 'Uslar', 'Vacha', 'Vaihingen an der Enz', 'Vallendar', 'Varel', 'Vechta', 'Velbert', 'Velburg', 'Velden', 'Vellberg', 'Velen', 'Vellmar', 'Velten', 'Verden (Aller)', 'Veringenstadt', 'Verl', 'Versmold', 'Vetschau/Spreewald', 'Viechtach', 'Viernheim', 'Viersen', 'Villingen-Schwenningen', 'Vilsbiburg', 'Vilseck', 'Vilshofen an der Donau', 'Visselhövede', 'Vlotho', 'Voerde (Niederrhein)', 'Vogtsburg im Kaiserstuhl', 'Vohburg an der Donau', 'Vohenstrauß', 'Vöhrenbach', 'Vöhringen', 'Volkach', 'Völklingen', 'Volkmarsen', 'Vreden', 'Wachenheim an der Weinstraße', 'Wächtersbach', 'Wadern', 'Waghäusel', 'Wahlstedt', 'Waiblingen', 'Waibstadt', 'Waischenfeld', 'Waldbröl', 'Waldeck', 'Waldenbuch', 'Waldenburg', 'Waldenburg', 'Waldershof', 'Waldheim', 'Waldkappel', 'Waldkirch', 'Waldkirchen', 'Waldkraiburg', 'Waldmünchen', 'Waldsassen', 'Waldshut-Tiengen', 'Walldorf', 'Walldürn', 'Wallenfels', 'Walsrode', 'Waltershausen', 'Waltrop', 'Wanfried', 'Wangen im Allgäu', 'Wanzleben-Börde', 'Warburg', 'Waren (Müritz)', 'Warendorf', 'Warin', 'Warstein', 'Wassenberg', 'Wasserburg am Inn', 'Wassertrüdingen', 'Wasungen', 'Wedel', 'Weener', 'Wegberg', 'Wegeleben', 'Wehr', 'Weida', 'Weiden in der Oberpfalz', 'Weikersheim', 'Weil am Rhein', 'Weilburg', 'Weil der Stadt', 'Weilheim an der Teck', 'Weilheim in Oberbayern', 'Weimar', 'Weingarten', 'Weinheim', 'Weinsberg', 'Weinstadt', 'Weismain', 'Weißenberg', 'Weißenburg in Bayern', 'Weißenfels', 'Weißenhorn', 'Weißensee', 'Weißenstadt', 'Weißenthurm', 'Weißwasser/O.L.', 'Weiterstadt', 'Welzheim', 'Welzow', 'Wemding', 'Wendlingen am Neckar', 'Werben (Elbe)', 'Werdau', 'Werder (Havel)', 'Werdohl', 'Werl', 'Werlte', 'Wermelskirchen', 'Wernau (Neckar)', 'Werne', 'Werneuchen', 'Wernigerode', 'Wertheim', 'Werther (Westf.)', 'Wertingen', 'Wesel', 'Wesenberg', 'Wesselburen', 'Wesseling', 'Westerburg', 'Westerstede', 'Wetter (Ruhr)', 'Wetter', 'Wettin-Löbejün', 'Wetzlar', 'Widdern', 'Wiehe', 'Wiehl', 'Wiesbaden', 'Wiesmoor', 'Wiesensteig', 'Wiesloch', 'Wildau', 'Wildberg', 'Wildenfels', 'Wildeshausen', 'Wilhelmshaven', 'Wilkau-Haßlau', 'Willebadessen', 'Willich', 'Wilsdruff', 'Wilster', 'Wilthen', 'Windischeschenbach', 'Windsbach', 'Winnenden', 'Winsen (Luhe)', 'Winterberg', 'Wipperfürth', 'Wirges', 'Wismar', 'Wissen', 'Witten', 'Wittenberg', 'Wittenberge', 'Wittenburg', 'Wittichenau', 'Wittlich', 'Wittingen', 'Wittmund', 'Wittstock/Dosse', 'Witzenhausen', 'Woldegk', 'Wolfach', 'Wolfenbüttel', 'Wolfhagen', 'Wolframs-Eschenbach', 'Wolfratshausen', 'Wolfsburg', 'Wolfstein', 'Wolgast', 'Wolkenstein', 'Wolmirstedt', 'Worms', 'Wörrstadt', 'Wörth am Rhein', 'Wörth an der Donau', 'Wörth am Main', 'Wriezen', 'Wülfrath', 'Wunsiedel', 'Wunstorf', 'Wuppertal', 'Würselen', 'Wurzbach', 'Würzburg', 'Wurzen', 'Wustrow (Wendland)', 'Wyk auf Föhr', 'Xanten', 'Zahna-Elster', 'Zarrentin am Schaalsee', 'Zehdenick', 'Zeil am Main', 'Zeitz', 'Zell am Harmersbach', 'Zell im Wiesental', 'Zell (Mosel)', 'Zella-Mehlis', 'Zerbst/Anhalt', 'Zeulenroda-Triebes', 'Zeven', 'Ziegenrück', 'Zierenberg', 'Ziesar', 'Zirndorf', 'Zittau', 'Zörbig', 'Zossen', 'Zschopau', 'Zülpich', 'Zweibrücken', 'Zwenkau', 'Zwickau', 'Zwiesel', 'Zwingenberg', 'Zwönitz'];

[Typo3 scheduler]: Task failed to execute successfully. You are not allowed to access the given folder (msg#4.0.127)

Problem:
Beim Ausführen von Scheduler-Tasks (Planer) mit Datei-Zugriffen auf das FAL schlägt die Ausführung fehl. Das Protokoll gibt dazu folgende Fehlermeldung:

[scheduler]: Task failed to execute successfully. 
You are not allowed to access the given folder: "..." (msg#4.0.127)

Lösung: Der Benutzer _cli_scheduler braucht noch eine Dateifreigabe auf das angegebene Verzeichnis. Dazu einfach in der Typo3-Root eine entsprechende Verzeichnisfreigabe anlegen (z.B. auf „fileadmin/“) und dem Benutzer _cli_scheduler zuweisen.

Typo3 eID Dispatcher für Typo3 ab 7.6

Hier ein funktionierender eID Dispatcher Bootstrap für Typo3 ab Version 7.6, der auch das TSFE setzt und den Frontend-User (fe_user) initialisiert:

initFEuser();
$TSFE->initUserGroups();
// Important: no Cache for Ajax stuff
$TSFE->set_no_cache();
 
$TSFE->checkAlternativeIdMethods();
$TSFE->determineId();
$TSFE->initTemplate();
$TSFE->getConfigArray();
\TYPO3\CMS\Core\Core\Bootstrap::getInstance();

$TSFE->cObj = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer');
$TSFE->settingLanguage();
$TSFE->settingLocale();

/**
 * Initialize Backend-User (if logged in)
 */
$GLOBALS['BE_USER'] = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Core\Authentication\BackendUserAuthentication');
$GLOBALS['BE_USER']->start();

/**
 * Initialize Database
 */
$TSFE->connectToDB();
 
/**
 * @var $objectManager \TYPO3\CMS\Extbase\Object\ObjectManager
 */
$objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Extbase\Object\ObjectManager');
 
/**
 * Initialize Extbase bootstap
 */
$bootstrapConf['extensionName'] = $ajax['extensionName'];
$bootstrapConf['pluginName']	= $ajax['pluginName'];

$bootstrap = new \TYPO3\CMS\Extbase\Core\Bootstrap();
$bootstrap->initialize($bootstrapConf);
$bootstrap->cObj = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer');
 
/**
 * Build the request
 */
$request = $objectManager->get('TYPO3\CMS\Extbase\Mvc\Request');
 
$request->setControllerVendorName($ajax['vendor']);
$request->setcontrollerExtensionName($ajax['extensionName']);
$request->setPluginName($ajax['pluginName']);
$request->setControllerName($ajax['controller']);
$request->setControllerActionName($ajax['action']);
$request->setArguments($ajax['arguments']);

 
//$ajaxDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('Nng\Nnsubscribe\Controller\EidController');
//echo $ajaxDispatcher->processRequestAction();
 
$response = $objectManager->get('TYPO3\CMS\Extbase\Mvc\ResponseInterface');
$dispatcher = $objectManager->get('TYPO3\CMS\Extbase\Mvc\Dispatcher');
$dispatcher->dispatch($request, $response);

echo $response->getContent();

Typo3 PowerMail Finisher Beispiel

Viele Jahre lang war Typo3 Formhandler das „Schweizer Messer“ für uns in Sachen Formulare. Gerade die Möglichkeit, verschieden Hooks / Finisher und Preprocessoren zu implementieren machte Formhandler zu einer perfekten Basis aller komplizieren Wünsche und Anforderungen.

Eines Tages überraschte uns ein rotes Warnschild auf der Formhandler-Webseite, dass Formhandler nicht weiter entwickelt wird. Zeit sich nach Alternativen umzuschauen.

PowerMail hatten wir ehrlich gesagt über Jahre vernachlässigt: Es wirkte eher wie ein „Formularwerkzeug für Redakteure“ und schien eher unflexibel und ungestaltbar. Aber weit gefehlt: Seit langer Zeit bietet auch PowerMail verschiedene Finisher – und spätestens seit der Umstellung auf Fluid und Bootstrap gibt es eigentlich keine Ausreden mehr.

Hier ein kurzes Beispiel für einen möglichen Ansatz, mit vielen verschiedenen PowerMail-Formularen umzugehen, die unterschiedliche Konfigurationen und Finisher aufrufen sollen.

Für Suchmaschinen: PowerMail Finisher nur für bestimmte Formulare. Eigene Mail-Funktion PowerMail. PowerMail Finisher Beispiel mit mehreren Formularen.

PowerMail Finisher: Aufruf des eigenen Finishers

Zunächst muss der Finisher „scharf“ geschaltet werden. Das geht mit wenigen Zeilen TypoScript Setup:

plugin.tx_powermail.settings.setup {
   finishers {
      1 {
         class = Meine\Extension\Finisher\PowerMailFinisher
      }
   }
}

Danach werden ALLE Anfragen NACH dem Versand der E-Mail zusätzlich noch an unseren Finisher geschickt. Für den Fall, dass die Daten VOR dem Versand verändert werden sollen, gibt es übrigens auch einen PowerMail DataProcessor

Problem: Leider lässt sich so aber nicht steuern, wann und wo der Finisher nicht aufgerufen werden soll. Klar: Page-Conditions wären eine Möglichkeit:

[PIDinRootline = 123]
   plugin.tx_powermail.settings.setup.finishers.1 >
[global]

Nur leider: Spätestens, wenn das Formular auf eine anderer Seite kopiert wird gibt es ein Problem.

PowerMail Finisher: Konfiguration für einzelne Formulare

Hier gehen wir einen anderen Weg: Per TypoScript Setup definieren wir für jedes PowerMail-Formular beliebige Variablen und Einstellungen, die wir später verwenden wollen. KEY ist dabei die UID des PowerMail-Formulars (NICHT die tt_content.uid !). Lassen wir eine Key aus, wird später auch der Finisher abgebrochen.

plugin.tx_powermail.settings.setup.finishers.1.config {

   # KEY ist die uid des PowerMail-Formulars (NICHT tt_content.uid)
   
   # Konfiguration für das PowerMail-Formular mit der uid=1
   1 {
      beispiel = wert
      noch_ein_beispiel {
         was = immer
         ...
      }
   }

   # Konfiguration für das PowerMail-Formular mit der uid=2
   2 {
      ...
   }

   # Formular Nr. 3 ist ein normales Kontakt-Formular. 
   # Wir lassen hier einfach die Konfiguration aus.

   # Konfiguration für das PowerMail-Formular mit der uid=4
   4 {
      ...
   }
}

PowerMail Finisher

Der PowerMail Finisher selbst übernimmt dann die Auswertung und ggf. den Abbruch des Finishings, falls es keine Konfiguration für das PowerMail-Formular mit der aktuellen uid gibt:

namespace Meine\Extension\Finisher;

use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Utility\DebuggerUtility;

class PowerMailFinisher extends \In2code\Powermail\Finisher\AbstractFinisher {

   /**
    * @var \In2code\Powermail\Domain\Repository\MailRepository
    * @inject
    */
   protected $mailRepository;
   
   /**
    * @var \TYPO3\CMS\Extbase\Object\ObjectManager
    * @inject
    */
   protected $objectManager;
   
   public function myFinisher() {

      // Settings und Konfigurationen 
      $settings = $this->getSettings();
      $configuration = $this->getConfiguration();  
      
      // Ein cObject gibt es auch    
      $cObjData = $this->contentObject->data;

      // Beispiel: Gerenderte Mail holen
      $mail = $this->getMail();
      
      // Beispiel für den Zugriff auf FlexForm-Werte
      $ffService = GeneralUtility::makeInstance( \TYPO3\CMS\Extbase\Service\FlexFormService::class );
      $ffData = $ffService->convertFlexFormContentToArray( $cObjData['pi_flexform'] );
      
      // Die eigentliche uid des PowerMail-Formulars
      $powerMailFormUid = $settings['main']['form'];

      // Die spezielle Konfiguration für dieses Formular, falls vorhanden 
      $mailformConfig = $configuration[$powerMailFormUid];
      
      // Wenn keine Konfiguration vorhanden, dann Abbruch!
      if (!$mailformConfig) return;
      
      // Zugriff auf Formular-Daten
      $formData = $this->mailRepository->getVariablesWithMarkersFromMail($mail);

	  //
	  // und jetzt: Austoben!!
	  // 
	  
      return true;
   }

}

Typo3 Button „Dateien auswählen und hochladen“ fehlt im Backend bei Redakteuren

Thema „Benutzer-Rechte anlegen im Typo3 Backend“ – weil ich es immer wieder suche. Folgendes Problem: Ein Redakteur sieht den Button Dateien auswählen und hochladen nicht.

Folgende Einstellungen sind auf der Typo3-Wurzel korrekt gesetzt:

  • Unter „Dateispeicher“ gibt es nur den Default-Dateispeicher „fileadmin/“
  • Unter „Verzeichnisfreigaben“ gibt es eine Freigabe auf einen bestimmten Ordner (z.B. „fileadmin/zentren/wiesbaden“)
  • Die Verzeichnisfreigabe wurde korrekt dem Benutzer (oder der Benutzergruppe) zugeordnet

Trotzdem erscheint der Button Dateien auswählen und hochladen in der Ansicht des Redakteurs nicht.

Grund: Es wurde kein Default-Upload-Ordner für den Redakteur angegeben. Dazu unter dem Benutzer / Benutzergruppe, Reiter „Optionen“ bei TSconfig diese Einstellungen machen:

options.defaultUploadFolder = 1:/zentren/wiesbaden/

Die 1: steht dabei für die uid des Dateispeichers (fileadmin)

Für Suchmaschinen: Typo3 Upload Button fehlt. Backend Typo3 missing upload button. Button for fileupload missing Typo3 Backend. Redakteur kann Dateien nicht hochladen. Upload von Dateien im Backend nicht möglich. Typo3 upload-Button ausgeblendet. Bei Redakteuren ist der Upload-Button im Backend verschwunden. „Select & upload files“ button not showing for non-admin users. Missing „Select & upload files“ button for editors. Redakteur Dateien auswählen und hochladen.

Typo3 bootstrap_grids Header rendern

So kann man bei der Typo3-Extension bootstrap_grids den Header für die 2-, 3- und 4-Spalter ausgeben lassen:

tt_content.gridelements_pi1.20.10.setup {
   2cols.prepend = COA
   2cols.prepend.5 < lib.stdheader
   3cols.prepend = COA
   3cols.prepend.5 < lib.stdheader
   4cols.prepend = COA
   4cols.prepend.5 < lib.stdheader
}

Für Google: Header field:header bei bootstrap_grid ausgeben, rendern lib.stdheader für tt_content-Element. gridelements: Header aus tt_content-Tabelle ausgeben.

Typo3: TCA Default-Werte dynamisch setzen, per TSConfig oder Script

Problem: Man möchte, dass beim Anlegen eines neuen Datensatzes in Typo3 (z.B. News- oder Kalender-Eintrag) im Backend automatisch bestimmte Default-Werte für die Eingabefelder (TCA) gesetzt werden. Die default-Werte des TCA sollen sich aber dynamisch ändern, z.B. abhängig von der aktuell gewählten Seite (pid).

Anwendungsbeispiel: Mehrere Redakteure legen News für unterschiedliche Zentren an. Für jedes Zentrum gibt es einen eigenen SysFolder. Abhängig von Ordner soll die News direkt einer bestimmten News-Kategorie zugeordnet werden.

Für Suchmaschinen: Setzen von default-Werten TCA Typo3. Typo3 dynamically set default TCA values with TypoScript. Hook Signal Slot for setting TCA default value. News (tx_news) automatisch einer News-Kategorie / sys_category zuweisen, abhängig von der pid. SysFolder automatisch bestimmte default-Werte oder News-Kategorie. TCAdefaults per Hook setzen. TCA default-Werte dynamisch in Signal Slot setzen. Typo3 7.6 FormEngine getSingleField_preProcess getSingleFieldClass Hook. Typo3 TCA default Werte dynamisch per Script setzen, abhängig von der pid aktueller Seite.

Einfache Anwendungsfälle

Lösung per PageCondition in page TSconfig mit TCAdefaults

Definition in der pageTsConfig: Beim Durchlesen der Typo3 Dokumentation zu dem Thema klingt die page TSconfig für TCEFORM zunächst relativ vielversprechend:

TCEFORM.[table name].[field].config.[key] = Wert

Diese Einstellung funktioniert allerdings nur, wenn man damit z.B. die Anzahl der Zeilen eines Textfeldes ändern möchte, hier am Beispiel der Extension News (tx_news):

TCEFORM.tx_news_domain_model_news.title.config.type = text
TCEFORM.tx_news_domain_model_news.title.config.rows = 10

Irreführend ist, dass das Setzen eines default-Wertes damit nicht möglich, dafür aber mit TCAdefaults:

# No chance!!
TCEFORM.tx_news_domain_model_news.title.config.default = Mein Default-Titel
# So geht es:
TCAdefaults.tx_news_domain_model_news.title = Wundervoll!

Mit Hilfe einer einfache Page-Condition kann damit die Aufgabe für simple Anwendungsfälle gelöst werden:

[PIDinRootline = 21]
   TCAdefaults.tx_deineextension_domain_model_entry.title = Artikel auf Seite 21
[PIDinRootline = 23]
   TCAdefaults.tx_deineextension_domain_model_entry.title = Artikel auf Seite 23
[global]

Kleines Wunder nebenbei: das Setzen der Werte funktioniert auch mit MM-Relationen, z.B. für sys_category! Solle eine News direkt bestimmten sys_category-Kategorien zugeordnet werden, kann das über eine kommaseparierte Liste mit den uids der sys_category gemacht werden:

TCAdefaults.tx_news_domain_model_news.categories = 1,2,7

Hier ein Beispiel, wie die Extension tx_news für eine Jobbörse „mißbraucht“ werden kann: In einem bestimmten Ast des Seitenbaums (pid = 118) werden verschiedene Labels für den News-Datensatz geändert bzw. ausgeblendet, um für den Redakteur eine möglichst klare Darstellung zu erreichen. Dieses Script muss in die page TSconfig:

[PIDinRootline = 118]
   TCEFORM.tx_news_domain_model_news {
      title.label = Stellenname
      teaser.label = Arbeitgeber und Ort
      istopnews.disabled = 1
      author.disabled = 1
      author_email.disabled = 1
      datetime.disabled = 1
      archive.disabled = 1
   }
   TCAdefaults.tx_news_domain_model_news {
      type = 2
   }
[global]

Komplexere Anwendungsfälle

Lösung per Hook – bis Typo3 Version 4.7

Wie in einem schönen Artikel von Irene Höppner beschrieben, gab es bis zu Typo3 Version 4.7 einen wundervollen Hook (getSingleField_preProcess bzw. getSingleFieldClass), um das Problem zu lösen. Ein Artikel auf StackOverflow bringt die Lösung auf den Punkt: tt_news Autor automatisch per Hook setzen
Seit dem Einsatz der neuen FormEngine wurden aber ersatzlos alle Hooks und Signal/Slots entfernt.

Stefan Frömken schlägt für Typo3 > 6.2 eine modernere Lösung vor, die sich aber für die meisten Anwendungsfälle etwas zu aufwändig anfühlt.

Lösung per dynamischem User TSconfig in der ext_localconf.php

In einem Artikel von Netzhaut beschrieben, besteht die Möglichkeit, dass User TSconfig dynamisch einzubinden. Das erlaubt z.B. auch die Verwendung von PHP Code.

Entgegen des TCA (dessen final generiertes Array im Cache landet), wird der Inhalt der ext_localconf.php bei jedem Seitenaufruf im Backend neu gerendert. Dadurch wird in dem Beispiel der TimeStamp jedes Mal neu generiert:

Dazu kommt diese Zeile in die ext_localconf.php der eigenen Extension:

 \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addUserTSConfig(
   'TCAdefaults.tx_nnportfolio_domain_model_entry.title = Aktueller tstamp: '.mktime()
);

Lösung per dynamischem Page TSconfig in der ext_localconf.php

Das Gleiche funktioniert mit einer dynamischen Erweiterung der PageTSconfig:

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPageTSConfig(
   'TCAdefaults.tx_nnportfolio_domain_model_entry.title = Aktueller tstamp: '.mktime()
);

Maximal komplexe Anwendungsfälle

Wem das noch nicht reicht, der könnte das Problem noch deutlich flexibler lösen. In folgendem Beispiel sollen die Default-Werte für einen Datensatz per TypoScript-Setup definierbar sein. Dazu definieren wir alle Default-Werte im Setup – key ist dabei die pid der entsprechenden Seite:

plugin.tx_nnportfolio_nnportfolio {
   settings {
      defaultValuesByPid {
         21 {
            title = Hallo! Du bist auf Seite 21.
            addresses = 2,3
            categories = 1,2,3,4,5
         }
         23 {
            title = Das ist Seite 23.
            addresses = 1
            categories = 5
         }

      }      
   }
}

In die ext_tables.php kommt eine Funktion, die unseren eigenen „Hook“ aufruft und die TCA-Spalten für unsere Extension übergibt:

if (TYPO3_MODE == 'BE') {
   \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('Nng\\Nnportfolio\\Hooks\\TCAdefaultValuesHook')
      ->setDefaultValuesFromTS( $GLOBALS['TCA']['tx_nnportfolio_domain_model_entry']['columns'] );
}

Dann fehlt nur noch der entsprechende Hook. Er enthält einige zusätzliche Methoden, um im Backend an das TypoScript Setup für die aktuell ausgewählte Seite zu kommen.


getRootLine($pageUid);
      
      $TSObj = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\TypoScript\\ExtendedTemplateService');
      $TSObj->tt_track = 0;
      $TSObj->init();
      $TSObj->runThroughTemplates($rootLine);
      $TSObj->generateConfig();

      $typoscriptService = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\Extbase\\Service\\TypoScriptService');

      return $typoscriptService->convertTypoScriptArrayToPlainArray(
         (array) $TSObj->setup['plugin.']['tx_nnportfolio_nnportfolio.']
      );
      
   }
   
   /**
   *   Get current PID in backend.
   *   Uses various fallbacks depending on current view and backend module.
   *   ToDo: Ask somebody, how this can be done simple 🙂
   */
   public static function get_current_pid ( $pageUid = null ) {
      if (!$pageUid) $pageUid = (int) $GLOBALS['_REQUEST']['popViewId'];
      if (!$pageUid) $pageUid = (int) preg_replace( '/(.*)(id=)([0-9]*)(.*)/i', '\\3', $GLOBALS['_REQUEST']['returnUrl'] );
      if (!$pageUid) $pageUid = (int) preg_replace( '/(.*)(id=)([0-9]*)(.*)/i', '\\3', $GLOBALS['_POST']['returnUrl'] );
      if (!$pageUid) $pageUid = (int) preg_replace( '/(.*)(id=)([0-9]*)(.*)/i', '\\3', $GLOBALS['_GET']['returnUrl'] );
      if (!$pageUid) $pageUid = (int) $GLOBALS['TSFE']->id;
      if (!$pageUid) $pageUid = (int) $_GET['id'];
      if (!$pageUid) {
         list($page) = \TYPO3\CMS\Backend\Utility\BackendUtility::getRecordsByField('pages', 'pid', 0);
          $pageUid = intval($page['uid']);
      }
      return $pageUid;
   }
   

   /**
   *   Set TCA default value from TypoScript setup
   *
   */
   public static function setDefaultValuesFromTS ( &$columns ) {
      
      $settings = self::getTsSetup();
      $pid = self::get_current_pid();
      
      if ($defaultValuesByPid = $settings['settings']['defaultValuesByPid'][$pid]) {      
         foreach ($defaultValuesByPid as $k=>$v) {
            $columns[$k]['config']['default'] = $v;
         }
      }
   }
   
      
}

Grunt auf Mac installieren

Schnelldurchlauf, um auf Mac OSX (10.11 El Capitan) Grunt zu installieren. Vielen Dank an Martin Wagner für die Starthilfe!

1. NodeJS/npm Installer für Mac downloaden und installieren:

https://nodejs.org/en/download/

2. Im Terminal diese Befehle ausführen:

sudo npm update -g npm
sudo npm install -g grunt-cli

3. Config-Dateien anlegen

Ins Projekt-Verzeichnis gehen und in der Root diese beiden Dateien anlegen:
package.json

{
  "name": "testgrunt",
  "version": "1.0.0",
  "description": "MyTest",
  "main": "index.html",
  "scripts": {
    "test": ""
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "grunt": "^1.0.1",
    "grunt-autoprefixer": "^3.0.4",
    "grunt-bootstrap": "^0.1.0",
    "grunt-bootstrap-prefix": "^0.1.0",
    "grunt-contrib-uglify": "^1.0.1",
    "grunt-contrib-watch": "^1.0.0",
    "grunt-css-prefix": "^0.2.3",
    "grunt-sass": "^1.2.0"
  }
}

gruntfile.js (Pfade müssen angepasst werden)

module.exports = function(grunt) {
	
	// Configure task(s)
	grunt.initConfig({
		pkg: grunt.file.readJSON('package.json'),
		
		uglify: {
			build: {
				src: 'grunt_test/js/*.js',
				dest: 'grunt_test/ugliy-js.js'
			},
			dev: {
				options: {
					beautify: true,
					mangle: false,
					compress: false,
					preserveComments: 'all'
				},
				src: 'grunt_test/js/*.js',
				dest: 'grunt_test/ugliy-dev-js.js'
			}
		},
		
		watch: {
			options: {
				livereload: true,
			},
			js: {
				files: ['grunt_test/**/*.js'],
				tasks: ['uglify:dev']
			
			},
			html: {
				files: ['grunt_test/**/*.html']

			},
			css: {
				files: ['grunt_test/**/*.scss'],
				tasks: ['sass:dev']
			},
			typoscript: {
				files: ['grunt_test/**/*.ts']
			}
		},
		sass: {
			dev: {
				options: {
					outputStyle: 'expanded'
				},
				files: {
					'grunt_test/dev-merged.css' : 'grunt_test/scss/main.scss',
					// 'css/bootstrap.css' : 'src/scss/bootstrap.scss'
				}
			},
			build: {
				options: {
					outputStyle: 'compressed'
				},
				files: {
					'grunt_test/merged.css' : 'grunt_test/scss/main.scss',
					// 'css/bootstrap.css' : 'src/scss/bootstrap.scss'
				}
			}
		},
	});

	
	// Load PlugIns
	grunt.loadNpmTasks('grunt-contrib-uglify');
	grunt.loadNpmTasks('grunt-contrib-watch');
	grunt.loadNpmTasks('grunt-sass');
	
	// Register Tasks
	// grunt.registerTask('default', ['uglify:dev', 'sass:dev', 'watch']);
	// grunt.registerTask('build', ['uglify:build', 'sass:build', 'watch']);

	grunt.registerTask('default', ['uglify:dev', 'sass:dev']);
	grunt.registerTask('build', ['uglify:build', 'sass:build']);

};

4. Grunt initialisieren

Per Terminal ins Projektverzeichnis wechseln und das hier ausführen:

npm install
npm install grunt --save-dev

5. Befehle testen

Ab dann können folgende Befehle ausgeführt werden:

grunt (alle dateien uncompressed etc…)
grunt build (alles fertig für live version)
grunt watch (beobachten im Browser, dazu dann die Seite im Browser nochmal nach neu laden per Hand, danach übernimmt „Liverelad“ das Neuladen)

„Live-Reload“ Chrome-PlugIn installieren:
https://chrome.google.com/webstore/detail/livereload/jnihajbhpnppcggbcgedagnkighmdlei