Subversion-Projekte lars-tiefland.laravel_shop

Revision

Revision 193 | Revision 195 | Zur aktuellen Revision | Details | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
2 lars 1
<?php
2
 
3
namespace App\Models;
4
 
5
use Illuminate\Database\Eloquent\Factories\HasFactory;
6
use Illuminate\Database\Eloquent\Model;
169 lars 7
use Spatie\Sluggable\HasSlug;
8
use Spatie\Sluggable\SlugOptions;
181 lars 9
 
2 lars 10
class Directory extends Model
11
{
169 lars 12
    use HasFactory, HasSlug;
13
 
14
    /**
15
     * Get the options for generating the slug.
16
     */
17
    public function getSlugOptions(): SlugOptions
18
    {
19
        return SlugOptions::create()
20
            ->generateSlugsFrom('name')
21
            ->saveSlugsTo('slug')
22
            ->usingLanguage('de')
23
            ->doNotGenerateSlugsOnUpdate()
181 lars 24
            ->skipGenerateWhen(fn() => $this->id < 0);
169 lars 25
    }
181 lars 26
 
27
    public function navigation($root, $override = false, $rootInfo = false, $cnt = 0)
176 lars 28
    {
181 lars 29
        if (!isset($GLOBALS["count"][__function__ . "_" . $root])) {
30
            $GLOBALS["count"][__function__ . "_" . $root] = 0;
31
            $GLOBALS["zeit"][__function__ . "_" . $root] = 0;
176 lars 32
        }
193 lars 33
        $nav = array();
181 lars 34
        $GLOBALS["count"][__function__ . "_" . $root]++;
35
        $time = microtime(true);
176 lars 36
        $showArtikelstamm = false;
37
 
181 lars 38
        if (isset($GLOBALS["INI"]["Navigation"]["showArtikelstamm"])) {
176 lars 39
            $showArtikelstamm = true;
40
        }
41
 
181 lars 42
        $treebuffer = $this->where("directory_id", "=", $root)->get();
176 lars 43
 
44
 
181 lars 45
        if (is_array($treebuffer) && is_array($linkDirs)) {
46
            $treebuffer = array_merge($treebuffer, $linkDirs);
176 lars 47
        }
48
 
49
        $treebufferCount = 0;
181 lars 50
        if (is_countable($treebuffer)) {
51
            $treebufferCount = count($treebuffer) - 1;
176 lars 52
        }
53
 
54
        $i = 0;
181 lars 55
        if (is_array($treebuffer)) {
56
            foreach ($treebuffer as $counter => $zeile) {
176 lars 57
                $k = $i % 2;
58
                $i++;
59
 
60
                /* ######################################################################## */ /* Link entsprechend der Alias-Definition generieren.                        */
61
                /* ######################################################################## */
188 lars 62
                // Pfad ermitteln
63
                $buffer = array();
176 lars 64
 
188 lars 65
                /*$path = getPath_New($zeile['ID']);
176 lars 66
 
188 lars 67
                foreach ($path as $elem) {
68
                    //Muss hier gemacht werden, weil durch die UTF8 Kodierung die Umlaute für die str2url funktion nicht richtig übergeben werden
69
                    //Wenn man hier die Dateikodierung ändert funktioniert es auch nicht weil der Shop UTF8 ist
176 lars 70
 
188 lars 71
                    $name = $elem['Name'];
72
                    $umlaute = array(
73
                        "Ä",
74
                        "ä",
75
                        "Ö",
76
                        "ö",
77
                        "Ü",
78
                        "ü",
79
                    );
80
                    $umlauteErsetzen = array(
81
                        "Ae",
82
                        "ae",
83
                        "Oe",
84
                        "oe",
85
                        "Üe",
86
                        "ue",
87
                    );
88
                    $name = str_replace($umlaute, $umlauteErsetzen, $name);*/
176 lars 89
 
188 lars 90
                //$buffer[]=preg_replace("/[\W]+/", "", $elem['ID']."_".$elem['Name']);*/
91
                $dirLink = "/directory/" . $zeile['id'] . "-" . $zeile["slug"] . "/";
176 lars 92
 
188 lars 93
            }
176 lars 94
 
188 lars 95
            // dirLink
96
            //$zeile['dirLink']=$GLOBALS["INI"]["absoluteURL"]."/".implode("/",$buffer)."/";
97
            $zeile['dirLink'] = $dirLink;
176 lars 98
 
188 lars 99
            /* ######################################################################## */ /* Ausgabe der Unterverzeichnisse                                            */ /* ######################################################################## */
100
            // Container-Kopf
101
            $_SESSION['navigation']['nav-zebra'] = $k;
176 lars 102
 
188 lars 103
            $subdirs = $this->where("direcotry_id", "=", $zeile["ID"])->get();
104
            $nav["sub"][] = array(
105
                "id" => $zeile["ID"],
106
                "link" => $zeile['dirLink'],
107
                "name" => $zeile["Name"],
108
                "sub2" => $subdirs,
176 lars 109
 
188 lars 110
            );
176 lars 111
 
112
        }
113
        $anzahl_spalten = 3;
114
 
191 lars 115
        if (isset($GLOBALS["INI"]["navigation"]["anzahl_spalten"]) && is_numeric($GLOBALS["INI"]["navigation"]["anzahl_spalten"])) {
176 lars 116
            $anzahl_spalten = $GLOBALS["INI"]["navigation"]["anzahl_spalten"];
117
        }
118
 
192 lars 119
        if (isset($nav["sub"]) && is_array($nav["sub"])) {
181 lars 120
            $nav["sub"]['elemsPerRow'] = floor(count($nav["sub"]) / $anzahl_spalten);
121
            $nav["sub"]['elemsPerRowRest'] = count($treebuffer) - ($nav["sub"]['elemsPerRow'] * $anzahl_spalten);
176 lars 122
        }
123
 
181 lars 124
        $time2 = microtime(true);
176 lars 125
        $diff = $time2 - $time;
181 lars 126
        $GLOBALS["zeit"][__function__ . "_" . $root] += $diff;
176 lars 127
        return $nav;
128
    }
129
 
130
    /**
131
     * Wenn in der Config der Wert 'showNavigation' in der Kategorie 'Navigation' gleich "1" ist,
132
     * dann zeige die Navigation an.
133
     */
134
 
188 lars 135
    public
136
    function nav_menu($father = -1)
176 lars 137
    {
138
        $navigation = null;
181 lars 139
        if (!isset($GLOBALS["count"][__function__ . "_" . $father])) {
140
            $GLOBALS["count"][__function__ . "_" . $father] = 0;
141
            $GLOBALS["zeit"][__function__ . "_" . $father] = 0;
176 lars 142
        }
181 lars 143
        $GLOBALS["count"][__function__ . "_" . $father]++;
144
        $time = microtime(true);
145
        if ($GLOBALS['INI']['navigation']['cache_type'] == "2") {
176 lars 146
            $fName = $_SERVER["DOCUMENT_ROOT"] . "/menu_serialized.txt";
181 lars 147
            if (isset($GLOBALS["INI"]["treeRootMainNav"]) && $father == $GLOBALS["INI"]["treeRootMainNav"]) {
176 lars 148
                $fName = $_SERVER["DOCUMENT_ROOT"] . "/mainnav_serialized.txt";
149
            }
181 lars 150
            if (isset($GLOBALS["INI"]["treeRooSecondNav"]) && $father == $GLOBALS["INI"]["treeRootSecondNav"]) {
176 lars 151
                $fName = $_SERVER["DOCUMENT_ROOT"] . "/secondnav_serialized.txt";
152
            }
153
 
181 lars 154
            if (file_exists($fName)) {
155
                $content = file_get_contents($fName);
156
                $navigation = unserialize($content);
176 lars 157
            }
181 lars 158
        } elseif ($GLOBALS["INI"]["navigation"]["cache_type"] == "1") {
176 lars 159
            $fName = $_SERVER["DOCUMENT_ROOT"] . "/menu.xml";
160
 
181 lars 161
            if (file_exists($fName)) {
176 lars 162
                $confArr = array(
181 lars 163
                    "root" => "menu",
176 lars 164
                    "encoding" => "UTF-8",
165
                );
166
                $nav = new Config();
181 lars 167
                $nav = $nav->parseConfig($fName, "XML", $confArr);
176 lars 168
                $nav = $nav->toArray();
169
                $navigation = $nav["root"];
170
            }
171
        }
172
 
181 lars 173
        if (!$navigation) {
174
            $navigation = $this->getMenuFromDB($father);
176 lars 175
        }
176
 
181 lars 177
        $time2 = microtime(true);
176 lars 178
        $diff = $time2 - $time;
181 lars 179
        $GLOBALS["zeit"][__function__ . "_" . $father] += $diff;
176 lars 180
        return $navigation;
181
    }
182
 
188 lars 183
    private
184
    function getMenuFromDB($father)
176 lars 185
    {
181 lars 186
        if (!isset($GLOBALS["count"][__function__ . "_" . $father])) {
187
            $GLOBALS["count"][__function__ . "_" . $father] = 0;
188
            $GLOBALS["zeit"][__function__ . "_" . $father] = 0;
176 lars 189
        }
181 lars 190
        $GLOBALS["count"][__function__ . "_" . $father]++;
176 lars 191
        $navigation = array();
181 lars 192
        $time = microtime(true);
189 lars 193
        $order_by = array("kennung", "name");
178 lars 194
        $sql_erw = "AND artikelstamm = 0";
181 lars 195
        if (isset($GLOBALS['INI']['navigation']['order_by'])) {
176 lars 196
            $order_by = $GLOBALS['INI']['navigation']['order_by'];
197
        }
198
 
199
        //Sollen Artikelstämme in der Navigation rauskommen, dann hole auch Artikelstämme
181 lars 200
        if (isset($GLOBALS["INI"]["Navigation"]["showArtikelstamm"])) {
176 lars 201
            $sql_erw = "";
202
        }
181 lars 203
        if (isset($GLOBALS["INI"]["navigation"]["sqlErweiterung"])) {
176 lars 204
            $sql_erw .= " " . $GLOBALS["INI"]["navigation"]["sqlErweiterung"];
205
        }
206
 
190 lars 207
        $dirs = self::with('directory')->whereIn("status", [0, 2, 99])->where("directory_id", "=", $father)->get();
182 lars 208
        foreach ($dirs as $cnt => $dir) {
187 lars 209
            $dirLink = "/directory/" . $dir["id"] . "-" . $dir["slug"] . "/";
185 lars 210
            if ($dir["url"]) {
211
                $dirLink = $dir["url"];
212
            }
213
            $navigation[$cnt]["top"][] = array("id" => $dir["id"], "name" => $dir["name"], "dirLink" => $dirLink, "beschreibung" => $dir["description"],);
188 lars 214
            $nav = $this->navigation($dir["id"], false, true, $cnt);
194 lars 215
            if (isset($nav["sub"])) {
216
                $navigation[$cnt]["sub"] = $nav["sub"];
217
            }
181 lars 218
        }
219
        $time2 = microtime(true);
176 lars 220
        $diff = $time2 - $time;
181 lars 221
        $GLOBALS["zeit"][__function__ . "_" . $father] += $diff;
176 lars 222
        return $navigation;
223
    }
181 lars 224
 
180 lars 225
    public function directory()
226
    {
181 lars 227
        return $this->belongsTo(Directory::class);
180 lars 228
    }
2 lars 229
}