Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Verbesserungsvorschlag: Kategorie mitsamt enthaltener Artikel deaktivieren

    speedy

    • Viel Schreiber
    • Beiträge: 3.214
    Ooh, mir war so, als hätten wir hier schon Ansätze, doch ging es bisher ja nur um den Namen. :)

    speedy

    • Viel Schreiber
    • Beiträge: 3.214
    Wecke dieses Thema noch einmal nach 7 Monaten auf. :)

    kaisa

    • Schreiberling
    • Beiträge: 365
    Finde ich klasse die Funktion, denn ich brauche das auch hin und wieder. Ich finde es eigentlich unlogisch, wenn man eine Kategorie deaktiviert, dass darin enthaltene Artikel weiter gefunden werden.

    Aber wie vorgeschlagen mit Wahlmöglichkeit ist doch klasse.

    mhbosch

    • Schreiberling
    • Beiträge: 394
    • Geschlecht:
    Ist das Thema noch aktuell? Ich habe gerade ein Modul fertig gestellt, das Sonderpreise für alle Artikel einer  Kategorie und wenn gewünscht auch den Unterkategorien erstellt.

    Technik wäre ja die gleiche! Liste der Knotenpunkte und alle Produkte die den Knotenpunkt haben zu filtern.

    Könnt euch ja mal meinen Ansatz ansehen: MODUL: Sonderpreise mit vielen Möglichkeiten erstellen/löschen

    [EDIT Tomcraft 24.01.2012: Modul genannt und verlinkt.]

    Jenser

    • Frisch an Board
    • Beiträge: 60
    • Geschlecht:
    Ich hatte da mal ein Script in diese Richtung geschrieben, aber es leider noch nicht ins Backend integriert.
    Mach ich vielleicht noch irgendwann. :whistle:

    Es werden zunächst alle Kategorien deaktiviert und anschließend alle Kategorien in denen sich aktive Produkte befinden aktiviert.

    Code: PHP  [Auswählen]
    <?php
    function activate($categories_id)
    {
        if ($categories_id==0) {
            return 0;
        }
        else
        {
          $sql="UPDATE categories SET categories_status='1' WHERE categories_id=".$categories_id;
          mysql_query($sql) or die(mysql_error());    
         
          $sql="SELECT categories_id, parent_id FROM categories WHERE categories_id=".$categories_id;
          $res=mysql_query($sql) or die('<p>Fehler beim Auslesen der Daten.</p>' . mysql_error());
          While($data = mysql_fetch_assoc($res))
          {
                      return activate($data['parent_id']);
          }
        }
    }

    include("xtc_connect.php");//SQL Verbindungsaufbau
    $sql="UPDATE categories SET categories_status='0'";
    mysql_query($sql) or die(mysql_error());

    $sql="SELECT products.products_id, products.products_status, categories_id FROM products_to_categories INNER JOIN products ON products_to_categories.products_id=products.products_id WHERE products_status='1'";
    //sql.=" AND p.products_id=''";
    $res=mysql_query($sql) or die(mysql_error());

    $data=sqlresult2assocarray($res);//mysql result -> assoziatives array

    foreach($data as $key_h)
    {
          activate($key_h['categories_id']);
    }

    mysql_close($xtc_connection);//Verbindung beenden
    ?>
     

    Gruß Jenser

    mhbosch

    • Schreiberling
    • Beiträge: 394
    • Geschlecht:
    Hallo Jenser,

    was ja aber nicht berücksichtigt wird, ist ja der Ansatz, die Artikel in den Kategorien auch zu deaktivieren, oder?

    Viele Grüße,

    Michael

    mhbosch

    • Schreiberling
    • Beiträge: 394
    • Geschlecht:
    Mal als Ansatz:

    Die Artikel der Kategorien inkl. Unterkategorien bekommt man so geliefert:

    Code: SQL  [Auswählen]
    SELECT products_id FROM products WHERE products_id IN (
                                                                            SELECT products_id FROM  products_to_categories WHERE categories_id IN  (
                                                                            SELECT
                                                                    categories_id
                                                                    FROM
                                                                    (
                                                                    SELECT
                                                                    @rownum := @rownum+1 AS rownum,
                                                                    IF(@lastid <> mylist.categories_id, @id := mylist.categories_id, @id) AS pathid,
                                                                    @lastid := mylist.categories_id AS categories_id,
                                                                    @id := (SELECT parent_ID FROM categories WHERE categories_id = @id) AS parent_ID
                                                                    FROM
                                                                    (SELECT @id := 0, @lastid := 0, @rownum := 0) AS vars,
                                                                    (SELECT categories_id FROM categories) AS myloop,
                                                                    (SELECT categories_id FROM categories) AS mylist
                                                                    ) AS t
                                                                    WHERE
                                                                    pathid = 212
                                                                    )
                                                                    )

    Wobei 212 in diesem Beispiel natürlich einer Kategorie_ID entspricht!

    Die (Unter)Kategorien bekommt man dann mit der kürzeren Abfrage raus:

    Code: SQL  [Auswählen]
    SELECT
                                                                    categories_id
                                                                    FROM
                                                                    (
                                                                    SELECT
                                                                    @rownum := @rownum+1 AS rownum,
                                                                    IF(@lastid <> mylist.categories_id, @id := mylist.categories_id, @id) AS pathid,
                                                                    @lastid := mylist.categories_id AS categories_id,
                                                                    @id := (SELECT parent_ID FROM categories WHERE categories_id = @id) AS parent_ID
                                                                    FROM
                                                                    (SELECT @id := 0, @lastid := 0, @rownum := 0) AS vars,
                                                                    (SELECT categories_id FROM categories) AS myloop,
                                                                    (SELECT categories_id FROM categories) AS mylist
                                                                    ) AS t
                                                                    WHERE
                                                                    pathid = 212

    Dann macht man darum eine "xtc_db_fetch_array" Schleife und die Datensätze in der Tabelle auf activ oder inactiv setzen.

    Hoffe das klingt jetzt nicht so oberflächlich.
    Ich bin aber nicht so der HTML Programmierer, weiß ich auch nicht, wo man es am besten einbaut.
    In der Artikelverwaltung wäre es ja am besten aufgehoben!
    Wenn jemand Interesse hat, kann ich das ja mal in eine Funktion schreiben und er baut es dann in das Shopbackend ein!

    Oder?

    Viele Grüße,

    Michael

    vr

    • modified Team
    • Beiträge: 2.664
    Die KategorienIDs und ArtikelIDs kann man zb auch hiermit rausfischen, im Beispiel bis 4 Ebenen tief, aber einfach erweiterbar. Wurzelkategorie ist 4711.

    Code: SQL  [Auswählen]
    SELECT p2c.products_id, p2c.categories_id
    FROM products_to_categories p2c
    JOIN
    (SELECT concat_ws(',', c4.categories_id, c3.categories_id, c2.categories_id, c.categories_id) str
    FROM categories c
    LEFT JOIN categories c2 ON c.categories_id = c2.parent_id
    LEFT JOIN categories c3 ON c2.categories_id = c3.parent_id
    LEFT JOIN categories c4 ON c3.categories_id = c4.parent_id
    WHERE c.categories_id = 4711) s ON concat(',', s.str, ',') LIKE concat('%,', p2c.categories_id, ',%')

    Dann dieses select in zwei update statements einsetzen, zb so:

    Code: SQL  [Auswählen]
    -- Artikel abschalten
    UPDATE products
    SET products_status = 0
    WHERE products_id IN
    (/* das select statement von oben, ohne die categories_id im select-part */)

    -- Kategorien abschalten
    UPDATE categories
    SET categories_status = 0
    WHERE categories_id IN
    -- das select statement von oben, distinct, ohne die products_id im select-part:
    (SELECT DISTINCT p2c.categories_id
    FROM products_to_categories p2c
    JOIN
    (SELECT concat_ws(',', c4.categories_id, c3.categories_id, c2.categories_id, c.categories_id) str
    FROM categories c
    LEFT JOIN categories c2 ON c.categories_id = c2.parent_id
    LEFT JOIN categories c3 ON c2.categories_id = c3.parent_id
    LEFT JOIN categories c4 ON c3.categories_id = c4.parent_id
    WHERE c.categories_id = 4711) s ON concat(',', s.str, ',') LIKE concat('%,', p2c.categories_id, ',%'))

    Zum Anschalten den Status jeweils auf 1 statt auf 0 updaten. Keine Schleife, sondern nur 2 update statements. Und wenn nur die Kategorien (de)aktiviert werden sollen, nur das Kategorien-update statement. Wofür hat man denn seine Datenbank?  8-)

    Grüße, Volker

    mhbosch

    • Schreiberling
    • Beiträge: 394
    • Geschlecht:
    Hallo vr,

    da gebe ich Dir Recht. Mal alles die DB machen lassen.
    Muß aber zugeben, da mir dein Beispiel etwas Bauchschmerzen macht, dass die Kategorietiefe vorgegeben ist.

    Ach ja, bei meinem Statement ist ein Update eigentlich auch möglich. Werde ich mal testen. Eigentlich wäre dann in der "categories.php" ein rechter Button sinnvoll zum ein/abschalten.

    Viele Grüße,

    Michael

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.369
    • Geschlecht:
    [...]
    Ach ja, bei meinem Statement ist ein Update eigentlich auch möglich. Werde ich mal testen. Eigentlich wäre dann in der "categories.php" ein rechter Button sinnvoll zum ein/abschalten.
    [...]

    Da gebe ich dir definitiv Recht. ;-)

    Grüße

    Torsten

    mhbosch

    • Schreiberling
    • Beiträge: 394
    • Geschlecht:
    Fehlt ja nur noch jemand, der Lust hat, den Button da einzubauen. :gotta-go:

    Viele Grüße,

    Michael

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.369
    • Geschlecht:
    Und ich dachte, dass an der Stelle du ins Spiel kommst. :flee-mrgreen:

    Grüße

    Torsten

    mhbosch

    • Schreiberling
    • Beiträge: 394
    • Geschlecht:
    Was soll ich sagen.

    PHP Code geht ja, aber HTML ist nicht meine Stärke.

    Aber was nicht ist, kann ja noch werden, habe ja schon einiges geschafft!  :search:

    Nun steht aber eher das Update an, da bin ich ja nicht Up to Date! Und ich muß vorher meine ganzen Änderungen nachvollziehen (Ich Idiot, sollte mehr dokumentieren).

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.369
    • Geschlecht:

    mhbosch

    • Schreiberling
    • Beiträge: 394
    • Geschlecht:
    Ja, habe ich mir schon raus gesucht. Und FreeCommander. Das meiste habe ich auch dokumentiert, aber nicht alle Kleinigkeiten.

    Sollte kein Problem werden. Muß halt die Änderungen raussuchen, Updates aufspielen und dann testen.
    Was mir da eher Kopfzerbrechen macht, sind die Anpassungen im Template, da ich da nicht das Original nutze. Aber wozu habe ich denn einen Testshop installiert?  :panic:

    Ansonsten einfach in die Ecke setzen und heulen!!!  :’-(
    Marktplatz - Eine große Auswahl an neuen und hilfreichen Modulen sowie modernen Templates für die modified eCommerce Shopsoftware
    2 Antworten
    1815 Aufrufe
    01. Januar 2018, 12:12:35 von romanNDS
    1 Antworten
    683 Aufrufe
    17. September 2022, 09:23:06 von noRiddle (revilonetz)
    17 Antworten
    1515 Aufrufe
    11. April 2023, 14:36:26 von noRiddle (revilonetz)