Heim php教程 php手册 ecshop自动分成二次开发实例

ecshop自动分成二次开发实例

May 22, 2016 pm 06:38 PM
foreach undefined

自动分成功能在ecshop系统自带是没有的,如果我们需要对一单添加分成功能我们是需要进入二次开发的,下面小编来为各位介绍一个例子。

大概逻辑:

后台操作一个订单发货的时候进行自动分成,后台取消发货,退货,改为未发货的时候去掉自动分成部分。

核心代码:lib_common.php

//分成积分计算

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

<?php

function fenchenjifen($usertype = 3, $point) {

    $affiliate = unserialize($GLOBALS[&#39;_CFG&#39;][&#39;affiliate&#39;]);

    if ($usertype == 3) { //采购

        if ($affiliate[&#39;config&#39;][&#39;level_register_up&#39;]) {

            $affiliate[&#39;config&#39;][&#39;level_register_up&#39;]/= 100;

        }

        $point_cg = round($affiliate[&#39;config&#39;][&#39;level_register_up&#39;] * intval($point) , 0);

        return $point_cg;

    }

    if ($usertype == 1) { //经销商

        if ($affiliate[&#39;config&#39;][&#39;level_money_all&#39;]) {

            $affiliate[&#39;config&#39;][&#39;level_money_all&#39;]/= 100;

        }

        $point_cg = round($affiliate[&#39;config&#39;][&#39;level_money_all&#39;] * intval($point) , 0);

        return $point_cg;

    }

    if ($usertype == 2) { //财务

        if ($affiliate[&#39;config&#39;][&#39;level_register_all&#39;]) {

            $affiliate[&#39;config&#39;][&#39;level_register_all&#39;]/= 100;

        }

        $point_cg = round($affiliate[&#39;config&#39;][&#39;level_register_all&#39;] * intval($point) , 0);

        return $point_cg;

    }

}

/**

 *

 * @param undefined $order  订单信息

 * @param undefined $buyuser 购买者信息

 * @param undefined $integral 计算积分

 * $type = 1 增加  $type=-1 撤销

 * 分成log状态99

 */

function fun_fencheng_change($order, $buyuser, $integral = array() , $type = 1) { //店铺分成计算

    if (intval($order[&#39;parent_shopid&#39;]) == 0) return false;

    if (!is_array($buyuser)) return false;

    $order_id = $order[&#39;order_id&#39;];

    $separate_by = 99;

    switch ($buyuser[&#39;usertype&#39;]) {

        case &#39;0&#39;: //购买者类型

            $row = $GLOBALS[&#39;db&#39;]->getRow("SELECT * from " . $GLOBALS[&#39;ecs&#39;]->table(&#39;users&#39;) . " u " . " WHERE u.shopid  =" . $order[&#39;parent_shopid&#39;] . " and u.usertype=1"); //获取pid

            $up_uid = $row[&#39;user_id&#39;];

            if (!empty($up_uid) && $up_uid > 0) {

                $money = $point = 0;

                $point = fenchenjifen(1, $integral[&#39;custom_points&#39;]);

                // $info = sprintf($GLOBALS[&#39;_LANG&#39;][&#39;separate_info&#39;], $order[&#39;order_sn&#39;], $money, $point);

                $info = "订单" . $order[&#39;order_sn&#39;] . "分成获得积分:" . $point;

                log_account_change($up_uid, $money, 0, ($type) * $point, ($type) * $point, $info);

                //var_dump($info);

                if ($type == 1) {

                    write_affiliate_log1($order_id, $up_uid, $row[&#39;user_name&#39;], $money, $point, $separate_by);

                } else {

                    rollback_affiliate_log($order_id);

                }

                $orderupdate[&#39;is_separate&#39;] = $type == 1 ? $separate_by : 0;

                $GLOBALS[&#39;db&#39;]->autoExecute($GLOBALS[&#39;ecs&#39;]->table(&#39;order_info&#39;) , $orderupdate, &#39;UPDATE&#39;, "order_id = &#39;$order_id&#39;");

            }

            break;

        case &#39;3&#39;:

            $row = $GLOBALS[&#39;db&#39;]->getAll("SELECT u.shopid,u.user_id,u.usertype, u.user_name FROM " . $GLOBALS[&#39;ecs&#39;]->table(&#39;users&#39;) . " u " . " WHERE u.shopid= " . $order[&#39;parent_shopid&#39;] . " and u.usertype in (1,2)");

            foreach ($row as $val) { // 经销商和财务获得分成

                if ($val[&#39;usertype&#39;] == 1) {

                    $pointf = fenchenjifen(1, $integral[&#39;custom_points&#39;]);

                }

                if ($val[&#39;usertype&#39;] == 2) {

                    $pointf = fenchenjifen(2, $integral[&#39;custom_points&#39;]);

                }

                $up_uid = $val[&#39;user_id&#39;];

                //$info = sprintf($GLOBALS[&#39;_LANG&#39;][&#39;separate_info&#39;], $order[&#39;order_sn&#39;], $money, $pointf);

                $info = "订单" . $order[&#39;order_sn&#39;] . "分成获得积分:" . $pointf;

                log_account_change($up_uid, $money, 0, ($type) * $pointf, ($type) * $pointf, $info);

                if ($type == 1) {

                    write_affiliate_log1($order_id, $up_uid, $val[&#39;user_name&#39;], $money, $pointf, $separate_by);

                } else {

                    rollback_affiliate_log($order_id);

                }

                $orderupdate[&#39;is_separate&#39;] = $type == 1 ? $separate_by : 0;

                $GLOBALS[&#39;db&#39;]->autoExecute($GLOBALS[&#39;ecs&#39;]->table(&#39;order_info&#39;) , $orderupdate, &#39;UPDATE&#39;, "order_id = &#39;$order_id&#39;");

            }

            break;

    }

    return true;

}

/**

 *

 * @param undefined $oid

 * @param undefined $uid

 * @param undefined $username

 * @param undefined $money

 * @param undefined $point

 * @param undefined $separate_by

 * 写入订单分成 log

 */

function write_affiliate_log1($oid, $uid, $username, $money, $point, $separate_by) {

    $time = gmtime();

    $sql = "INSERT INTO " . $GLOBALS[&#39;ecs&#39;]->table(&#39;affiliate_log&#39;) . "( order_id, user_id, user_name, time, money, point, separate_type)" . " VALUES ( &#39;$oid&#39;, &#39;$uid&#39;, &#39;$username&#39;, &#39;$time&#39;, &#39;$money&#39;, &#39;$point&#39;, $separate_by)";

    if ($oid) {

        $GLOBALS[&#39;db&#39;]->query($sql);

    }

}

//撤销订单分成

function rollback_affiliate_log($order_id, $falg = - 2) {

    $sql = "UPDATE " . $GLOBALS[&#39;ecs&#39;]->table(&#39;affiliate_log&#39;) . " SET separate_type = &#39;$falg&#39;" . " WHERE order_id = &#39;$order_id&#39;";

    $GLOBALS[&#39;db&#39;]->query($sql);

}

Nach dem Login kopieren

需要注意的点:后台发货程序在admin / order . php需要修改的地方有:发货866行,取消发货1035行改为未发货3961行退货4132行。本代码只计算分成部分。自己下单部分另外。这个代码是按照店铺ID分成,多商户的。为ecshop二次开发版。无法用于原版。调用分成:fun_fencheng_change($order, $user, $integral, 1);

取消分成:fun_fencheng_change($order, $user, $integral, -1);


永久地址:

转载随意~请带上教程地址吧^^

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist der Unterschied zwischen der Verwendung von foreach und iterator zum Löschen von Elementen beim Durchlaufen von Java ArrayList? Was ist der Unterschied zwischen der Verwendung von foreach und iterator zum Löschen von Elementen beim Durchlaufen von Java ArrayList? Apr 27, 2023 pm 03:40 PM

1. Der Unterschied zwischen Iterator und foreach ist der polymorphe Unterschied (die unterste Ebene von foreach ist Iterator ein Schnittstellentyp, und es ist egal, ob for und foreach der Typ bekannt ist). 1. Warum heißt es, dass die unterste Ebene von foreach der von Iterator geschriebene Code ist: 2. Der Unterschied zwischen „remove in foreach“ und „iterator“. im Alibaba Java Development Manual, aber in Fall 1 wird kein Fehler gemeldet, und in Fall 2 wird zuerst ein Fehler gemeldet (java. util.ConcurrentModificationException).

So bestimmen Sie die Anzahl der foreach-Schleifen in PHP So bestimmen Sie die Anzahl der foreach-Schleifen in PHP Jul 10, 2023 pm 02:18 PM

​Die Schritte für PHP, um die Nummer der foreach-Schleife zu bestimmen: 1. Erstellen Sie ein Array von „$fruits“; 2. Erstellen Sie eine Zählervariable „$counter“ mit einem Anfangswert von 0. 3. Verwenden Sie „foreach“, um eine Schleife durchzuführen durch das Array und Erhöhen Sie den Wert der Zählervariablen im Schleifenkörper und geben Sie dann jedes Element und seinen Index aus. 4. Geben Sie den Wert der Zählervariablen außerhalb der „foreach“-Schleife aus, um zu bestätigen, welches Element die Schleife erreicht.

Lösung für PHP-Hinweis: Undefinierte Eigenschaft: Lösung für PHP-Hinweis: Undefinierte Eigenschaft: Jun 22, 2023 pm 02:48 PM

Beim Schreiben von Code in PHP kann es zu der Fehlermeldung „Hinweis: Undefinierte Eigenschaft“ kommen. Dieser Fehler bedeutet, dass wir auf eine undefinierte Eigenschaft zugreifen, normalerweise weil die Eigenschaft im Code nicht initialisiert wurde. Wie kann man dieses Problem lösen? Hier sind einige mögliche Lösungen: Eigenschaften initialisieren Dies ist der einfachste Weg, dieses Problem zu lösen. Durch die explizite Initialisierung einer Eigenschaft im Code wird sichergestellt, dass sie vor der Verwendung definiert wird. Zum Beispiel: Klasse

TypeError: Die Eigenschaft „$XXX' von undefiniert in Vue kann nicht gelesen werden. Wie gehe ich damit um? TypeError: Die Eigenschaft „$XXX' von undefiniert in Vue kann nicht gelesen werden. Wie gehe ich damit um? Nov 25, 2023 pm 12:14 PM

Wenn Sie bei der Entwicklung mit Vue.js häufig auf die Fehlermeldung „TypeError: Cannotreadproperty'$XXX'ofundefined“ stoßen, wie sollten Sie damit umgehen? In diesem Artikel werden die Ursachen dieses Fehlers und seine Behebung erläutert. Die Ursache des Problems liegt darin, dass wir bei der Verwendung von Vue.js dies häufig zum Aufrufen von Methoden von Vue-Komponenten verwenden, z. B.: exportdefault{data()

PHP gibt ein Array mit umgedrehten Schlüsseln zurück PHP gibt ein Array mit umgedrehten Schlüsseln zurück Mar 21, 2024 pm 02:10 PM

In diesem Artikel wird ausführlich erläutert, wie PHP nach dem Umdrehen eines Schlüsselwerts ein Array zurückgibt. Der Herausgeber hält dies für recht praktisch, daher teile ich es Ihnen als Referenz mit. Ich hoffe, dass Sie nach dem Lesen dieses Artikels etwas gewinnen können. PHP-Schlüsselwert-Flip Der Array-Schlüsselwert-Flip ist eine Operation für ein Array, bei der die Schlüssel und Werte im Array ausgetauscht werden, um ein neues Array mit dem ursprünglichen Schlüssel als Wert und dem ursprünglichen Wert als Schlüssel zu generieren. Implementierungsmethode In PHP können Sie das Schlüsselwert-Umdrehen eines Arrays mit den folgenden Methoden durchführen: array_flip()-Funktion: Die array_flip()-Funktion wird speziell für Schlüsselwert-Umdrehungsvorgänge verwendet. Es erhält ein Array als Argument und gibt ein neues Array mit vertauschten Schlüsseln und Werten zurück. $original_array=[

Was bedeuten undefiniert und null? Was bedeuten undefiniert und null? Nov 20, 2023 pm 02:39 PM

In JavaScript stellen sowohl undefiniert als auch null das Konzept von „nichts“ dar: 1. undefiniert stellt eine nicht initialisierte Variable oder eine nicht vorhandene Eigenschaft dar. Wenn eine Variable deklariert, ihr aber kein Wert zugewiesen ist, ist der Wert der Variablen undefiniert. Beim Zugriff auf Eigenschaften, die nicht im Objekt vorhanden sind, ist der zurückgegebene Wert ebenfalls undefiniert. 2. Null stellt eine leere Objektreferenz dar. In einigen Fällen kann die Objektreferenz auf Null gesetzt werden, um den von ihr belegten Speicher freizugeben.

Wie behebe ich den Fehler „undefiniert: path.Join' in Golang? Wie behebe ich den Fehler „undefiniert: path.Join' in Golang? Jun 24, 2023 pm 01:12 PM

In der Go-Sprache ist das Pfadpaket eines der wichtigen Werkzeuge zur Verarbeitung von Dateipfaden. Die Funktion path.Join() kann mehrere Pfade zu einem vollständigen Pfad zusammenfassen. Manchmal wird jedoch die Fehlermeldung „undefiniert: path.Join“ angezeigt. Was sollten Sie tun? Hier sind einige gängige Lösungen: Überprüfen Sie die Importanweisung. Zunächst müssen Sie bestätigen, dass Sie das Pfadpaket korrekt importiert haben. In der Go-Sprache ist dies beim Importieren eines Pakets möglich

was ist undefiniert was ist undefiniert Jul 31, 2023 pm 02:28 PM

undefiniert stellt einen Zustand dar, in dem ein Wert oder eine Variable nicht existiert oder undefiniert ist. Er kann als Standardwert verwendet werden, um festzustellen, ob einer Variablen ein Wert zugewiesen wurde, und kann auch zum Festlegen von Standardparameterwerten verwendet werden. Obwohl undefiniert in verschiedenen Programmiersprachen unterschiedliche Bedeutungen und Verwendungen haben kann, kann uns das Verständnis des Konzepts von undefiniert helfen, Programme besser zu verstehen und zu schreiben.

See all articles