betere code

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Michael vanDijk

Michael vanDijk

17/05/2020 23:43:04
Quote Anchor link
Hoi allemaal

ik heb onderstaande code in mijn script staan, nou is het zo dat ik heeel veel keywords heb zeg maar en dit soort code nu ongeveer 1500 regels inneemt in mijn script..

ik bendus op zoek naar een simpelere code waarin ik de keywords in de database bijvoorbeeld zet en de nummers van de categorieen ook

of is er een andere oplossing ?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
if (strpos($data['name'], 'Zweetdeken') OR strpos($data['name'], 'Zweetdeken')!== false) {
            $array = array("1", "5", "21");
            foreach($array as $cat){
            $this->db->query("INSERT INTO " . DB_PREFIX . "product_to_category SET product_id = '" . (int)$product_id . "', category_id = '" . $cat . "'");
            }
            echo "ik heb het volgend artikel toevoegd ". $data['name'] .", check je het even ?<br /> aan categorie " . $cat . " zweetdeken";

        } else {
            $data['category'] = '0';

        }


        if (strpos($data['name'], 'rok') OR strpos($data['name'], 'blouse') OR strpos($data['name'], 'Blouse') OR strpos($data['name'], 'jurk') OR strpos($data['name'], 'skirt') OR strpos($data['name'], 'dress') !== false) {
        
            $array = array("1", "2", "25");
            foreach($array as $cat){
            $this->db->query("INSERT INTO " . DB_PREFIX . "product_to_category SET product_id = '" . (int)$product_id . "', category_id = '" . $cat . "'");
            }
            echo "ik heb het volgend artikel toevoegd ". $data['name'] .", check je het even ?<br /> aan categorie " . $cat . " (110, 137)";
    
        } else {
            $data['category'] = '0';

        }


graag hoor ik jullie mening
 
PHP hulp

PHP hulp

25/11/2024 18:45:21
 
- Ariën  -
Beheerder

- Ariën -

18/05/2020 00:19:10
Quote Anchor link
Wat dacht je van een eigen gemaakte functie?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
function addProduct($name) {
// verwerk de boel

// return true terug als het gelukt is, of anders een false.

return true;
}
Gewijzigd op 18/05/2020 00:19:26 door - Ariën -
 
Ozzie PHP

Ozzie PHP

18/05/2020 00:39:48
Quote Anchor link
>> of is er een andere oplossing ?

Ja. Een 'regel' bij het programmeren is dat je werkt volgens het DRY principe. DRY staat voor Don't Repeat Yourself. Ofwel, code die zichzelf telkens herhaalt met als enige verschil de variabelen (zweetdeken, blouse, jurk enz.) moet je ombouwen naar 1 code-blok waaraan je variabelen kunt meegeven. De variabelen zelf kun je opslaan in een array of liever nog database, waarbij je de producten koppelt aan categorieën.
 
Thomas van den Heuvel

Thomas van den Heuvel

18/05/2020 16:50:07
Quote Anchor link
Het eerste probleem is waarschijnlijk dat er verschillende keywords zijn die over hetzelfde gaan. Hoe is het bijvoorbeeld mogelijk dat er blijkbaar zowel een keyword "blouse" alsook "Blouse" bestaat? Deze zouden uniek moeten zijn?

Dan zie ik het verband niet helemaal dat je een kledingstuk als "rok" of "blouse" op dezelfde manier categoriseert.

En vervolgens heb je een stapel "magische constanten" -1,5,21 en 1,2,25- (daadwerkelijke categorieën) waar je deze informatie aan ophangt. Op die manier dupliceer je een heleboel informatie in je database.

Misschien is het ook een beter als je deze "keywords" of "tags" echt los ziet van categorieën.

De categorieën kunnen best statisch en voorgedefinieerd zijn. Klassificeer een "rok" of "jurk" ook echt als zodanig, en als je hier geen onderscheid tussen maakt, laat dan een van de twee categorieën vervallen. Of introduceer een attribuut "lengte" ofzo.

En dan de "keywords" of "tags". Misschien moet je hier anders tegenaan kijken, deze zouden bijvoorbeeld termen als "casual", "zakelijk" of zelfs "bloemetjesmotief" kunnen bevatten; hoe dan ook, die zijn niet noodzakelijkerwijs gekoppeld aan een specifiek kledingsstuk (blouse of broek) maar overstijgen deze indeling, of liever gezegd, dit is gewoon een andere indeling. Dit zou dus een koppeling kunnen vormen tussen het product en de keyword/tag. Maar dat staat dus verder los van de indeling van het product in een (of meer) categorie(ën).

Zowel voor de categorieën alsook de keywords/tags is het zaak dat jij tot op zekere hoogte de regie houdt over de indeling. Je zult deze dus op een of andere manier moeten kunnen beheren zodat je een wildgroei van soortgelijke of dezelfde namen voorkomt anders groeit je systeem dicht en nog belangrijker, dan schiet je waarschijnlijk je doel voorbij: het kunnen zoeken, filteren en vinden van producten met specifieke eigenschappen.

Ook moet je misschien nog onderscheid maken tussen producteigenschappen en keywords/tags en besluiten wat waar thuishoort. Wat hoort bij productinformatie thuis, en wat niet. Neem bijvoorbeeld een t-shirt. De eigenschap "halsvorm" hoort waarschijnlijk wel bij dit product, met als mogelijke waarden V-hals, ronde hals et cetera. Maar stel nu dat dit specifieke t-shirt hoorde bij een of andere collectie van een merk. Dit zou dan wellicht beter in een keyword/tag thuis kunnen horen "Levis wintercollectie 2019" oid.

Het op een goede manier bouwen van productconfiguraties en -indelingen is nog niet heel erg makkelijk.
 
Michael vanDijk

Michael vanDijk

18/05/2020 17:22:38
Quote Anchor link
Deze code is onderdeel van een api koppeling in opencart naar een leverancier. het doet alleen producten importeren en wordt alleen bij nieuwe producten gebruikt dus zo zware belasting geeft het allemaal niet.. de nummers coresponderen inderdaad met categorieen en dit is in opencart zelf dus hier kan ik niks aan wijzigen..

ik ben bezig met jullie opmerkingen te verwerken in een class maar helemaal eruit komen lukt niet...

maar als jullie me op weg willen helpen ben ik zeer blij, ik ben niet van plan om heel opencart opnieuw te gaan schrijven maar het script wat de api betreft wil ik wel graag optimaliseren.

is er iemand misschien bereidwillig al dan niet tegen vergoeding me hiermee te helpen. ik heb een aantal foutjes en nieuwe dingen die erin moeten komen.

Toevoeging op 19/05/2020 12:23:35:

ik heb nu onderstaande code.
klopt dit een beetje met de volgende tabel in de DB en inhoud.
Maar hoe moet ik dit dan laten uitvoeren in de code?
dit moet dan uitgevoerd worden in de functie addProduct

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
function keyword2Product($name) {
    $keywords = $this->db->query("SELECT * FROM " . DB_PREFIX . "keywords2category WHERE product_id = '" . (int)$product_id . "' LIMIT 1");

if (strpos($data['keyword'])!== false) {
            $array = array($data['category']);
            foreach($array as $cat){
            $this->db->query("INSERT INTO " . DB_PREFIX . "product_to_category SET product_id = '" . (int)$product_id . "', category_id = '" . $cat . "'") or die(mysqli_error($db));
            }
            echo "ik heb het volgend artikel toevoegd ". $data['name'] .", check je het even ?<br /> aan categorie " . $cat . " zweetdeken";

        }
return true;
}


CREATE TABLE `keywords2category` (
  `id` int(11) NOT NULL,
  `keyword` varchar(255) NOT NULL,
  `category` varchar(255) NOT NULL,
  `status` int(2) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


INSERT INTO `keywords2category` (`id`, `keyword`, `category`, `status`, `product_id`) VALUES
(2, 'Zweetdeken', '1,5,21', 1, 11),
 
Michael vanDijk

Michael vanDijk

21/05/2020 11:47:31
Quote Anchor link
Heb ik nou zo moeilijk probleem of is dit forum gewoon dood.

ik heb netjes volgens de regels gepost heb het zelf geprobeerd post de gehele code met nette omschrijving.

en geen reacties. weet niemand het of kan ik beter naar een andere website gaan..
 
Adoptive Solution

Adoptive Solution

21/05/2020 12:03:20
Quote Anchor link
Met behulp van deze class :

https://github.com/bennettstone/simple-mysqli

en deze aanvulling :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php

class Variations extends DB  {

    public function addProduct( $table, $name, $product_id, $categorien )
    {

        foreach( $categorien as $categorie )
        {

            $query = 'INSERT INTO ' . $table . ' SET product_id = "' . (int)$product_id . '", category_id = "' . $categorie . '"';
            echo $query . '<br />';
            //$this->link->query( $query );
        }
        return TRUE;
    }


    public function updateProduct( $data )
    {

        $query = "SELECT * FROM power_options_data WHERE pwr_sku = '" . $this->link->escape($data['sku']) . "' LIMIT 1";

        $option = $this->link->query( $query );
        
        // print $data;
        // print "<br />data sku ".$data['sku']."<br />";
        // print "data sku ".$data['eancode']."<br />";
        // print "".$data['variations']['eancode']."<br />";
        // echo "data variations ". $data['variations']['0401103078-5001-2XL']['eancode'] ."";
        // foreach om alles door te lo(o)pen.

        foreach( $data['variations'] as $variation )
        {

            $query = "UPDATE power_options_data SET pwr_quantity = '" . (int)$variation['stock'] . "' WHERE pwr_product_code = '" . (int)$variation['eancode'] . "'";
            $this->link->query( $query );
            print "<br />data sku ".$data['sku']."<br />";
            echo "<pre>variation stock " . (int)$variation['stock'] . "</pre>";
            //echo "<pre>".print_r($variation)."</pre>"; // ter debugging om te kijken wat er in de array zit.
            echo "<pre>variation eancode ". $variation['eancode']."";
        }


        if ( $option->num_rows )
        {

            $pwr_id = $option->row['pwr_id'];
            $query = "UPDATE power_options_data SET pwr_quantity = '" . (int)$variation['stock'] . "' WHERE pwr_product_code = '" . (int)$variation['eancode'] . "'";
            $this->link->query( $query );
            //print_r(" . (int)$variation['stock'] . ")
        }
    }

}
// end class
?>


heb ik dit bedacht :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<h1>Variatie</h1>

<?php
include ('class.db.php');
include ('variations_class.php');

$variatie = new Variations();

?>


<h2>Een enkel artikel</h2>

<?php
$table
      = 'product_to_category';
$name       = 'zweetdeken';
$produktid  = 12;
$categorien = ["1", "5", "21"];

$succes = 'Artikel <span style="color: navy;font-weight: bold;">' . $name . '</span> is toevoegd.<br />Check even aan categorie <span style="color: navy;font-weight: bold;">' . $categorien[count($categorien)-1] . ' (' . $name . ')</span>.';
$faal   = 'Niets toegevoegd';

echo $variatie->addProduct ( $table, $name, $produktid, $categorien ) == TRUE ? $succes : $faal ;

?>


<h2>Meerdere artikelen</h2>

<?php

$artikelen
= [
    [

    'table'      => 'product_to_category',
    'name'       => 'zweetdeken',
    'produktid'  => 12,
    'categorien' => ["1", "5", "21"]
    ],
    [

    'table'      => 'product_to_category',
    'name'       => 'blouse',
    'produktid'  => 20,
    'categorien' => ["1", "2", "25"]
    ]
];


echo '<pre>' . print_r( $artikelen, TRUE ) . '</pre>';

foreach ( $artikelen as $artikel )
{

    echo '<p>';
    echo $artikel['name'] . ' : ' . $artikel['produktid'] . '<pre>' . print_r( $artikel['categories'], TRUE ) . '</pre>' ;
    echo '</p>';

    $succes = 'Artikel <span style="color: navy;font-weight: bold;">' . $artikel['name'] . '</span> is toevoegd.<br />Check even aan categorie <span style="color: navy;font-weight: bold;">' . $artikel['categorien'][count($artikel['categorien'])-1] . ' (' . $artikel['name'] . ')</span>.';
    $faal   = 'Niets toegevoegd';

    echo $variatie->addProduct ( $artikel['table'], $artikel['name'], $artikel['produktid'], $artikel['categorien'] ) == TRUE ? $succes : $faal ;
}

?>


Of dit de bedoeling is, mag een ander beoordelen.

Deze code in de db.class :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
private $link = null;


veranderen in

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
protected $link = null;
Gewijzigd op 21/05/2020 12:15:53 door Adoptive Solution
 
Thomas van den Heuvel

Thomas van den Heuvel

21/05/2020 16:39:28
Quote Anchor link
Michael vanDijk op 18/05/2020 17:22:38:
Deze code is onderdeel van een api koppeling in opencart naar een leverancier. het doet alleen producten importeren en wordt alleen bij nieuwe producten gebruikt dus zo zware belasting geeft het allemaal niet..

Uhm, houdt dat niet in dat jij de regie hebt over hoe jij je keywords en categorieën indeelt? Je zegt ook (letterlijk) "nou is het zo dat ik heeel veel keywords heb". Schiet dat dan niet het doel van keywords voorbij? En vervolgens dupliceer je deze keywords ook over (nog meer) categorieën?

Michael vanDijk op 18/05/2020 17:22:38:
ik heb een aantal foutjes en nieuwe dingen die erin moeten komen.

Misschien is het inderdaad ook handig dat je omschrijft hoe je dit alles uiteindelijk in wilt gaan zetten. En dan kunnen we ook kijken of die aanpak wel een goede is. Op dit moment lijkt het erop dat je de aardappelstempel te enthousiast hanteert.

Michael vanDijk op 18/05/2020 17:22:38:
ik heb nu onderstaande code.
klopt dit een beetje met de volgende tabel in de DB en inhoud.

Geen idee. Zou je in woorden kunnen vertellen wat de bedoeling is, zodat we dit kunnen rijmen met de code? De functie/methode kent in ieder geval de waarden $product_id en $data niet - deze worden nergens meegegeven.

Michael vanDijk op 18/05/2020 17:22:38:
Maar hoe moet ik dit dan laten uitvoeren in de code?
dit moet dan uitgevoerd worden in de functie addProduct

Dit is in zekere zin van latere zorg, dat is slechts de "uitvoering". Als deze code goed in elkaar zit is dit slechts een kwestie van een aanroep? Waar ik mij eerder zorgen over maak: dit alles is, zoals jij aangaf, een importroutine. Dit is dus een batch van wijzigingen die in het geheel uitgevoerd dient te worden, of in het geheel niet. Ik zou dus verwachten dat deze hele operatie in een database-transactie wordt uitgevoerd. Dit zie ik nergens terug in de code.

Michael vanDijk op 21/05/2020 11:47:31:
Heb ik nou zo moeilijk probleem of is dit forum gewoon dood.

ik heb netjes volgens de regels gepost heb het zelf geprobeerd post de gehele code met nette omschrijving.

en geen reacties. weet niemand het of kan ik beter naar een andere website gaan..


Niemand is verplicht om hier te reageren, simpelweg omdat je aan de balie staat en op de bel aan het duwen bent wil niet zeggen dat je bediend wordt. Dit is geen afhaalchinees. Jij bent geen betalende klant.

Je geeft ons ook een puzzelstukje en verwacht dat wij een oplossing uit onze hoge hoed toveren. Misschien levert dit op den duur wel een efficientere oplossing op, maar het is mogelijk nog steeds geen goede oplossing.

Je krijgt waarschijnlijk meer bijval en positieve feedback op het moment dat je ook kunt motiveren waarom je dit alles in deze vorm wilt gieten (schets eens het grotere plaatje, in plaats van het geven van een enkel puzzelstuk) in plaats van de houding "dit is hoe het moet zijn en ik wil graag de kortere code om dit ding te doen". En als je dat dan gedaan hebt, dan is wellicht het eindantwoord dat de aanpak om moet, en mogelijk ook de code hoe je dit verder gaat gebruiken.

Dat is dan wellicht niet het advies wat je wilt horen, maar de eindconclusie kan best zijn dat het ontwerp gewoon stinkt. Als je geen zin hebt in deze discussie besteed het dan uit aan iemand die niet al teveel nadenkt over ontwerp en voor een paar knaken aan de molen wil draaien.

Wij weten op dit moment niet hoe de importroutine zou moeten luiden en we weten ook niet of dat wel een goede aanpak is omdat we niet weten of de vorm van de data waarin je dit importeert wel de juiste/het handigste is voor verder gebruik.
 
Ward van der Put
Moderator

Ward van der Put

21/05/2020 20:00:02
Quote Anchor link
Michael vanDijk op 21/05/2020 11:47:31:
Heb ik nou zo moeilijk probleem of is dit forum gewoon dood.


A problem well stated is a problem half-solved.
 
Michael vanDijk

Michael vanDijk

30/05/2020 13:17:23
Quote Anchor link
okay probeer ik het opnieuw ;-) ik wilde alleen het topic beetje kort houden kwa code leek me namelijk in dit geval niet heel erg nodig maar goed als jullie het graag willen post ik alle code wel die in het script zitten.

ik doe me best. deels is code wat al in het systeem zit opencart en deels is wat er is gemaakt in ene php script die via een api verbinding maakt met een leverancier en zodoende producten importeert in de database. mits er nieuwe producten zijn.


Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254

<?php
public function checkProduct($data) {
        $search = '';
        if ($data['sku']) {
            $search .= "sku = '" . $this->db->escape($data['sku']) . "'";
        }

        if ($search) {
            $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product WHERE " . $search . " LIMIT 1");
            if ($query->num_rows) {
                return $query->row['product_id'];
            }
        }

        $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_description WHERE name = '" . $this->db->escape(trim($data['name'])) ."' LIMIT 1");

        if ($query->num_rows) {
            return $query->row['product_id'];
        }

        return false;
    }


public function addProduct($data) {
        $language_id = 2;
        $prijsje = "";
        if (isset($data['customer_group_price_rrp'])) {
            $prijs_excl_btw = round($data['customer_group_price_rrp']['website_price'] / 1.21, 4);
            //$prijs_excl_btw = $prijs_excl_btw / 1.21;

            // Vermenigvuldigen met 1,21 voor 21% btw

            $prijs_incl_btw = 1.21 * $prijs_excl_btw;
            $prijs_incl_btw = round($prijs_incl_btw, 2);

            // Vermenigvuldigen met 4, casten naar integer en weer delen door 4
            $afgeronde_prijs_incl_btw = 4 * $prijs_incl_btw;
            $afgeronde_prijs_incl_btw = (int)$afgeronde_prijs_incl_btw;
            $afgeronde_prijs_incl_btw = $afgeronde_prijs_incl_btw / 4;
            
            $afgeronde_prijs_incl_btw = ceil($afgeronde_prijs_incl_btw) - 0.05;            

            $prijsje = $afgeronde_prijs_incl_btw / 1.21;
            //$prijsje = ceil($prijsje2) - 0.05;    
        }
        if (isset($details['customer_group_price']['special_price'])) {
            
            $prijs_excl_btw = round($data['customer_group_price_rrp']['website_price'] / 1.21, 4);
            $prijs_excl_btw = $prijs_excl_btw / 1.21;

            // Vermenigvuldigen met 1,21 voor 21% btw
            $prijs_incl_btw = 1.21 * $prijs_excl_btw;
            $prijs_incl_btw = round($prijs_incl_btw, 2);

            // Vermenigvuldigen met 4, casten naar integer en weer delen door 4
            $afgeronde_prijs_incl_btw = 4 * $prijs_incl_btw;
            $afgeronde_prijs_incl_btw = (int)$afgeronde_prijs_incl_btw;
            $afgeronde_prijs_incl_btw = $afgeronde_prijs_incl_btw / 4;
            
            $afgeronde_prijs_incl_btw = ceil($afgeronde_prijs_incl_btw) - 0.05;        
            $prijsje = $afgeronde_prijs_incl_btw / 1.21;
            
            //$data['price'] = round($data['customer_group_price_rrp']['special_price'] / 1.60, 4);
        }

        $default_status = 1;
        $default_category = 1;

        $this->db->query("INSERT INTO " . DB_PREFIX . "product SET model = '" . $this->db->escape(trim($data['model'])) . "', sku = '" . $this->db->escape($data['sku']) . "', ean = '" . $this->db->escape($data['eancode']) . "', quantity = '100', minimum = '1', subtract = '1', manufacturer_id = '6', shipping = '1', price = '" . (float)$prijsje . "', status = '". $default_status ."', tax_class_id = '9', date_added = NOW()") or die(mysqli_error($db));

        $product_id = $this->db->getLastId();

        $path = 'data/hvpolo/';

        if (isset($data['image'])) {
            $image = explode('/', $data['image']);

            if (count($image) > 1) {
                $image = $image[count($image) - 1];
            }
else {
                $image = $image[0];
            }

            
            if (!file_exists(DIR_IMAGE . $path . $image)) {
                $this->getImage($data['image'], $image);
            }

            
            $this->db->query("UPDATE " . DB_PREFIX . "product SET image = '" . $this->db->escape($path . $image) . "' WHERE product_id = '" . (int)$product_id . "'") or die(mysqli_error($db));
        }


        $description = str_replace('. ', '.<br /><br />', $data['short_description']) . '<br /><br />' . str_replace('. ', '.<br /><br />', $data['description']) . '.';
        $description = str_replace('..', '.', $description);



        if (strpos($data['name'], 'Zweetdeken') OR strpos($data['name'], 'Zweetdeken')!== false) {
            $array = array("1", "5", "21");
            foreach($array as $cat){
            $this->db->query("INSERT INTO " . DB_PREFIX . "product_to_category SET product_id = '" . (int)$product_id . "', category_id = '" . $cat . "'") or die(mysqli_error($db));
            }

            echo "ik heb het volgend artikel toevoegd ". $data['name'] .", check je het even ?<br /> aan categorie " . $cat . " zweetdeken";

        }
elseif (strpos($data['name'], 'rok') OR strpos($data['name'], 'blouse') OR strpos($data['name'], 'Blouse') OR strpos($data['name'], 'jurk') OR strpos($data['name'], 'skirt') OR strpos($data['name'], 'dress') !== false) {
        
            $array = array("1", "2", "25");
            foreach($array as $cat){
            $this->db->query("INSERT INTO " . DB_PREFIX . "product_to_category SET product_id = '" . (int)$product_id . "', category_id = '" . $cat . "'") or die(mysqli_error($db));
            }

            echo "ik heb het volgend artikel toevoegd ". $data['name'] .", check je het even ?<br /> aan categorie " . $cat . " (110, 137)";
    
        }
elseif (strpos($data['name'], 'baseballcap')  OR strpos($data['name'], 'Baseball pet') !== false) {
            
            $array = array("1", "2", "17", "28", "32");
            foreach($array as $cat){
            $this->db->query("INSERT INTO " . DB_PREFIX . "product_to_category SET product_id = '" . (int)$product_id . "', category_id = '" . $cat . "'") or die(mysqli_error($db));
            }

            echo "ik heb het volgend artikel toevoegd ". $data['name'] .", check je het even ?<br /> aan categorie " . $cat . " (110, 137)";
    
        }

// en dan nog veel meer met andere keywords die delete ik even voor het aantal regels .

        else {
        $this->db->query("INSERT INTO " . DB_PREFIX . "product_to_category SET product_id = '" . (int)$product_id . "', category_id = '1'") or die(mysqli_error($db));
        }


        $keyword = str_replace(' ', ', ', strtolower($data['name']));
        $this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET product_id = '" . (int)$product_id . "', language_id = '" . (int)$language_id . "', name = '" . $this->db->escape($data['name']) . "', description = '" . $this->db->escape($description) . "', meta_title = '" . $this->db->escape($data['name']) . "', meta_description = '" . $this->db->escape($data['short_description']) . "', meta_keyword = '". $this->db->escape($keyword) ."'") or die(mysqli_error($db));

        $this->db->query("INSERT INTO " . DB_PREFIX . "product_to_store SET product_id = '" . (int)$product_id . "', store_id = '0'");

        $color_id = 48;
        $size_id = 47;

        // functie voor variations
        if ($data['variations']) {
            // Product
            $this->db->query("INSERT INTO " . DB_PREFIX . "power_options_product SET pwr_product_id = '" . (int)$product_id . "', pwr_subtract = '1', pwr_price_prefix = '+', pwr_price_standard = '1', pwr_special_prefix = '=', pwr_special_standard = '1', pwr_points_prefix = '=', pwr_weight_prefix = '=', pwr_dimensions_prefix = '=', pwr_code = '0'") or die(mysqli_error($db));

            // Kleur
            $this->db->query("INSERT INTO " . DB_PREFIX . "power_options SET pwr_product_id = '" . (int)$product_id . "', pwr_level = '0', pwr_option_id = '" . (int)$color_id . "'") or die(mysqli_error($db));
            // Maat
            $this->db->query("INSERT INTO " . DB_PREFIX . "power_options SET pwr_product_id = '" . (int)$product_id . "', pwr_level = '1', pwr_option_id = '" . (int)$size_id . "'") or die(mysqli_error($db));

            foreach ($data['variations'] as $key => $variation) {
                $image = '';

                // Kleur
                $color = trim($variation['color']);

                $check = $this->db->query("SELECT option_value_id FROM " . DB_PREFIX . "option_value_description WHERE option_id = '" . (int)$color_id . "' AND name = '" . $this->db->escape($color) . "' LIMIT 1");

                if ($check->num_rows) {
                    $color_value_id = $check->row['option_value_id'];
                }
else {
                    // Insert option value
                    $this->db->query("INSERT INTO " . DB_PREFIX . "option_value SET option_id = '" . (int)$color_id . "'");

                    $color_value_id = $this->db->getLastId();

                    $this->db->query("INSERT INTO " . DB_PREFIX . "option_value_description SET option_value_id = '" . (int)$color_value_id . "', language_id = '" . (int)$language_id . "', option_id = '" . (int)$color_id . "', name = '" . $this->db->escape($color) . "'");
                }


                // Maat
                $size = trim($variation['shirt_size']);

                $check = $this->db->query("SELECT option_value_id FROM " . DB_PREFIX . "option_value_description WHERE option_id = '" . (int)$size_id . "' AND name = '" . $this->db->escape($size) . "' LIMIT 1");

                if ($check->num_rows) {
                    $size_value_id = $check->row['option_value_id'];
                }
else {
                    // Insert option value
                    $this->db->query("INSERT INTO " . DB_PREFIX . "option_value SET option_id = '" . (int)$size_id . "'");

                    $size_value_id = $this->db->getLastId();

                    $this->db->query("INSERT INTO " . DB_PREFIX . "option_value_description SET option_value_id = '" . (int)$size_value_id . "', language_id = '" . (int)$language_id . "', option_id = '" . (int)$size_id . "', name = '" . $this->db->escape($size) . "'");
                }


                // Power option aanmaken
                $this->db->query("INSERT INTO " . DB_PREFIX . "power_options_data SET pwr_product_id = '" . (int)$product_id . "', pwr_model = '" . $key . "', pwr_sku = '" . (int)$data['sku'] . "', pwr_product_code = '" . $variation['eancode'] . "', pwr_quantity = '" . $variation['stock'] . "', pwr_points = '0', pwr_weight = '0', pwr_length = '0', pwr_width = '0', pwr_height = '0'");

                $power_id = $this->db->getLastId();

                // Kleur en maat aan power koppelen
                $this->db->query("INSERT INTO " . DB_PREFIX . "power_options_value SET pwr_id = '" . (int)$power_id . "', pwr_product_id = '" . (int)$product_id . "', pwr_level = '0', pwr_option_value_id = '" . (int)$color_value_id . "'");
                $this->db->query("INSERT INTO " . DB_PREFIX . "power_options_value SET pwr_id = '" . (int)$power_id . "', pwr_product_id = '" . (int)$product_id . "', pwr_level = '1', pwr_option_value_id = '" . (int)$size_value_id . "'");
                
                if ($variation['image'] && $variation['image'] != $data['image']) {
                    $image = explode('/', $variation['image']);

                    if (count($image) > 1) {
                        $image = $image[count($image) - 1];
                    }
else {
                        $image = $image[0];
                    }

                    
                    if (!file_exists(DIR_IMAGE . $path . $image)) {
                        $this->getImage($variation['image'], $image);
                    }
                }


                // Kleur koppelen als code als er een afbeelding is
                if ($image) {
                    $this->db->query("INSERT INTO " . DB_PREFIX . "power_options_code SET pwr_product_id = '" . (int)$product_id . "', pwr_code = '" . (int)$color_value_id . "'");
                    
                    $power_code_id = $this->db->getLastId();
    
                    // Kleur koppelen aan afbeelding code
                    $check = $this->db->query("SELECT pwr_code_id FROM " . DB_PREFIX . "power_options_image WHERE pwr_product_id = '" . (int)$product_id . "' AND pwr_image = '" . $this->db->escape($path . $image) . "' LIMIT 1");

                    if (!$check->num_rows) {
                        $this->db->query("INSERT INTO " . DB_PREFIX . "power_options_image SET pwr_code_id = '" . (int)$power_code_id . "', pwr_product_id = '" . (int)$product_id . "', pwr_image = '" . $this->db->escape($path . $image) . "', pwr_sort_order = '0'");
                    }
                }
            }
        }


        if ($data['name']) {
            $keyword = str_replace(' ', '-', strtolower($data['name']));
            
            $query = $this->db->query("SELECT url_alias_id FROM " . DB_PREFIX . "url_alias WHERE keyword = '" . $this->db->escape($keyword) . "' LIMIT 1");

            if ($query->num_rows) {
                $keyword = $keyword . '-' . $product_id;
            }


            $this->db->query("INSERT INTO " . DB_PREFIX . "url_alias SET query = 'product_id=" . (int)$product_id . "', keyword = '" . $this->db->escape($keyword) . "'");
        }

                if ($data['name']) {
            $keyword = str_replace(' ', '-', strtolower($data['name']));
            
            $query = $this->db->query("SELECT seo_url_id FROM " . DB_PREFIX . "seo_url WHERE keyword = '" . $this->db->escape($keyword) . "' LIMIT 1");

            if ($query->num_rows) {
                $keyword = $keyword . '-' . $product_id;
            }


            $this->db->query("INSERT INTO " . DB_PREFIX . "seo_url SET store_id = '0', language_id = '2', query = 'product_id=" . (int)$product_id . "', keyword = '" . $this->db->escape($keyword) . "'");
        }




    }


private function getImage($url, $image) {
        $path = 'data/hvpolo/';

        $content = file_get_contents($url);
        
        $fp = fopen(DIR_IMAGE . $path . $image, "w");
        fwrite($fp, $content);
        fclose($fp);

        return DIR_IMAGE . $path . $image;
    }

?>

dan heb je nog het model
omdat het MVC is opgebouwd

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244

api.php
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

class ControllerApiHvpolo extends Controller {

    protected $client;
    protected $session_id;
    protected $user = 'userid';
    protected $key = 'wachtwoord';
    protected $DefaultCategoryID = '0000';
    protected $storeID = '25';
    protected $emails = ['[email protected]', '[email protected]'];
//    protected $emails = ['[email protected]', '[email protected]'];

    public function index() {
        $this->client = new SoapClient('http://website.com/api/soap/?wsdl');
        $this->session_id = $this->client->login($this->user, $this->key);

        // Get all products from HV Polo
        try {
            $products = $this->client->call($this->session_id, 'ipad_api.customerproducts', [null, $this->DefaultCategoryID, $this->storeID]);

            if ($products) {
                $this->load->model('api/hvpolo');

    $counter = 0;
    $new = '';
    $duration = 0;
    $i=0;
    $max_aantal_producten_toevoegen = 50;
    $max_products = $max_aantal_producten_toevoegen;
                $mailsturen = '';


                $message = '<html><body>';
                $message .= '<table rules="all" style="border-color: #666;" cellpadding="10">';
                $message .= "Er zijn nieuwe producten toegevoegd. ";

                foreach ($products as $product) if ($i < $max_products) {
                    // Check if product exists
                if (!$this->model_api_hvpolo->checkProduct($product)) {
                    $details = $this->client->call($this->session_id, 'ipad_api.customerproduct', [$product['product_id'], $this->storeID]);
                    
                if ($details['customer_group_price']['special_price'] > 0 ) {
                    $special = "<span style='color:red;'>  Ja </span>";
                }

                else {
                    $special = " Nee";
                }

                
                if ($details) {
                $keyword = str_replace(' ', '-', strtolower($details['name']));

                // Add product if (does not exist)
                $mailsturen = 'yes';
                $message .= "<tr style='background: #eee;'><td><strong>Naam:</strong> </td><td><a href='https://rsruitersport.nl/clone2/".$keyword."'>".$details['name']."</a></td></tr>";
                $message .= "<tr><td><strong>Product id: </strong> </td><td>".$details['product_id']."</td></tr>";
                
                if (isset($details['customer_group_price']['website_price'])) {
                $message .= "<tr><td><strong>Product (advies) Prijs: </strong> </td><td>&euro; ". $details['customer_group_price_rrp']['website_price'] ."</td></tr>";
                }
    
                if ($details['customer_group_price']['special_price'] > 0) {
                $message .= "<tr><td><strong>Product special price: </strong> </td><td><span style='color:red;font-width:bold;'> &euro; ". $details['customer_group_price']['special_price'] ." </span></td></tr>";
                }

                                    
                            $starttime = microtime(true);
                            $this->model_api_hvpolo->addProduct($details);
                            $endtime = microtime(true);                
                            $duration += ($endtime - $starttime);
                            $counter++;
                            $i+=1;
                        }
                    }
                }


                    if ($mailsturen == 'yes') {
            

                $email = "[email protected]\r\n";

                $subject = 'Er zijn '.$counter.' nieuwe producten toegevoegd aan HV Polo';

                $headers = "From: [email protected]\r\n";
                $headers .= "Reply-To: [email protected]\r\n";
                $headers .= "CC: [email protected], [email protected], [email protected]\r\n";
                $headers .= "MIME-Version: 1.0\r\n";
                $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

                $message .= "<tr><td><strong>&nbsp; </strong> </td><td></td></tr>";
                $message .= "<tr><td><strong>Stastistiekjes </strong> </td><td></td></tr>";
                $message .= "<tr><td><strong>Aantal producten toegevoegd: </strong> </td><td>".$counter."</td></tr>";
                $message .= "<tr><td><strong>En dat duurde: </strong> </td><td>".$duration." ms</td></tr>";
                $message .= "</table>";
                $message .= "</body></html>";
    
                if ($counter > 0) {
                                    mail($email, $subject, $message, $headers);
                            $this->db->query("INSERT INTO " . DB_PREFIX . "api_log SET type = 'import_new', aantal_producten = '". $counter ."',  duration = '" . $duration . "', datetime = NOW(), site = 'Hv Polo'");
                            }
                                
                                // Duration to DB table
                                $this->db->query("INSERT INTO " . DB_PREFIX . "api_log SET type = 'import_new', aantal_producten = '". $counter ."',  duration = '" . $duration . "', datetime = NOW(), site = 'Hv Polo'");
                            }

                            echo "<h2> Er zijn geen producten meer.</h2>";
                }
        }
catch(Exception $e) {
            foreach ($this->emails as $email) {
                mail($email, 'HV Polo API error', $e->getMessage());
            }
        }
    }

public function update() {
        $this->client = new SoapClient('http://website.com/api/soap/?wsdl');
        $this->session_id = $this->client->login($this->user, $this->key);
        try {
            $products = $this->client->call($this->session_id, 'ipad_api.customerproducts', [null, $this->DefaultCategoryID, $this->storeID]);
            if ($products) {
                $this->load->model('api/hvpolo');
                    $counter = 0;
                    $new = '';
                    $duration = 0;
                    $i=0;
                    $max_aantal_producten_toevoegen = 1;
                    $max_products = $max_aantal_producten_toevoegen;

                foreach ($products as $product) if ($i < $max_products) {
                if (!$this->model_api_hvpolo->checkProduct2($product)) {
                    $details = $this->client->call($this->session_id, 'ipad_api.customerproduct', [$product['product_id'], $this->storeID]);
                    
                if ($details) {
                if (isset($details['customer_group_price']['special_price'])) {
                }

                                    
                            $starttime = microtime(true);
                            $this->model_api_hvpolo->updateProduct($details);                            
                            $endtime = microtime(true);                            
                            $duration += ($endtime - $starttime);
                            $counter++;
                        //    echo "<pre>";
                         //    print_r($product);
                         //    print_r($details);
                         //    echo "</pre>";

                            $new .= ''. $details['name']. '\r\n';
                            $new .= '<br />';
                            $i+=1;
                        }
                    }
                }

                    if ($new) {
            //echo "dit is gedaan?";
                if ($counter > 0) {
                            $this->db->query("INSERT INTO " . DB_PREFIX . "api_log SET type = 'update', aantal_producten = '". $new ."',  duration = '" . $duration . "', datetime = NOW(), site = 'Hv Polo'");
                            }

                                
                                // Duration to DB table
                                $this->db->query("INSERT INTO " . DB_PREFIX . "api_log SET type = 'update', aantal_producten = '". $new ."',  duration = '" . $duration . "', datetime = NOW(), site = 'Hv Polo'");
                            }
                }

                echo "dit is 2x";
        }
catch(Exception $e) {
            foreach ($this->emails as $email) {
                mail($email, 'HV Polo API error', $e->getMessage());
            }
        }
    }


    public function update_orgineel() {
        $this->client = new SoapClient('http://website.com/api/soap/?wsdl');
        $this->session_id = $this->client->login($this->user, $this->key);


//Hoeveel dagen geschiedenis moet de update draaien?
                $aantal_dagen_update = '-100 day';


        // Get all products from HV Polo with updated stock
        try {
            $products = $this->client->call($this->session_id, 'ipad_api.customerstock', [$this->DefaultCategoryID, $this->storeID, 1]);

            if ($products) {
                $this->load->model('api/hvpolo');

                $duration = 0;

                foreach ($products as $product) {
                    $starttime = microtime(true);

                    $this->model_api_hvpolo->updateProduct($product);
                    
                    $endtime = microtime(true);
                            
                    $duration += ($endtime - $starttime);
                }


                // Duration to DB table
                $this->db->query("INSERT INTO " . DB_PREFIX . "api_log SET type = 'import_update', aantal_producten = '". $new ."', duration = '" . $duration . "', datetime = NOW(), site = 'main'");
            }
        }
catch(Exception $e) {
            foreach ($this->emails as $email) {
                mail($email, 'API error', $e->getMessage());
            }
        }
    }

    
    public function clean() {
        $this->client = new SoapClient('http://website.com/api/soap/?wsdl');
        $this->session_id = $this->client->login($this->user, $this->key);


//Hoeveel dagen geschiedenis moet de update draaien?
                $aantal_dagen_update = '-300 day';
                try {
            $products = $this->client->call($this->session_id, 'ipad_api.customerstock', [$this->DefaultCategoryID, $this->storeID, 1, ['stock_last_change' => date('Y-m-d', strtotime('".$aantal_dagen_update."')) . ' 00:00:00']]);

            if ($products) {
                $this->load->model('api/hvpolo');

                $duration = 0;

                foreach ($products as $product) {
                    $starttime = microtime(true);

                    $this->model_api_hvpolo->deleteProduct($product);
                    
                    $endtime = microtime(true);
                            
                    $duration += ($endtime - $starttime);
                }


                // Duration to DB table
                $this->db->query("INSERT INTO " . DB_PREFIX . "api_log SET type = 'import_clean', aantal_producten = '". $new ."', duration = '" . $duration . "', datetime = NOW(), site = 'hv polo'");
            }
        }
catch(Exception $e) {
            foreach ($this->emails as $email) {
                mail($email, 'HV Polo API error', $e->getMessage());
            }
        }
        
    }
        
}

?>


moet ik nog meer code posten ? dan zal ik dat doen.
Gewijzigd op 30/05/2020 13:53:03 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

31/05/2020 00:19:13
Quote Anchor link
Misschien was het handig geweest als je in je starttopic had aangegeven dat het opencart betrof. Wij hadden hier ook naar moeten vragen.

Voordat je gaat nadenken hoe je dit gaat omschrijven lijkt het mij belangrijk dat je éérst een plan bedenkt:
- hoe je de sleutelwoorden gaat opschonen/indelen (hoe gebruik je deze in de website?), en
- hoe je deze sleutelwoorden vervolgens gaat behe(e)r(s)en om later weer wildgroei te voorkomen, het overzicht kunt bewaren, en je simpelweg niet in code hoeft te klooien als je eens iets wilt aanpassen

Op het moment dat je een pakket gebruikt dan heeft dit pakket meestal al een soort van filosofie over de indeling en het gebruik van functionaliteit. De product_to_category tabel lijkt standaard functionaliteit dus de kans is groot dat iemand anders tegen dit "specifieke" probleem is gelopen en hier al een oplossing voor verzonnen heeft. Maar deze sleutelwoorden zijn mogelijk een niet-bestaande extra laag in opencart die je zelf hebt toegevoegd? Heb je al eens gezocht hoe andere mensen dit hebben aangevlogen, of heb je op de marktplaats van opencart al eens rondgeneusd om te kijken of er misschien een uitbreiding beschikbaar is die ongeveer doet wat jij wilt?

Hoe dan ook, de importcode zal op een of andere manier een stuk logica moeten hebben - nadat je dus al die cleanup hebt gedaan enzo - en moet dus een soort van set van regels kunnen volgen om koppelingen totstand te brengen tussen een product en de bijbehorende categorieën, bij voorkeur zonder dit alles vast op te nemen in programmacode.

En misschien hoort dit niet eens in de import thuis, zie verder hieronder...

Bestaan op dit moment dit soort koppelingen alleen in code? Ik bedoel hiermee: stel dat het product een "zweetdeken" betreft, dan is het de bedoeling dat het product_id wordt gekoppeld aan de categorie-id's 1, 5, en 21. Dit is productconfiguratie, dit wil je niet verankeren in code (hard coding). Op welke andere plekken in jouw opencart website wordt vervolgens "zweetdeken" als zoekterm gebruikt? Misschien wil je dit als SEO-tag opnemen of wat dan ook als dit zo bepalend is?

Het is in ieder geval zaak dat je een uniforme aanpak verzint die overal bruikbaar is.

Je zou zelfs kunnen denken aan een extra entiteit "tags" oid om deze mapping eenmalig aan te maken. Je doet dan in feite hetzelfde als in je code, maar deze kun je dan op zijn minst beheren op het beeldscherm.

Ook zou je je af kunnen vragen of het uberhaupt wel een goed idee is dat je het maken van dit soort koppelingen opneemt in je import, en het daarmee afhankelijk maakt van de import. Even los van hoe je het voorgaande technisch oplost, stel dat je een nieuw sleutelwoord verzint die mogelijk ook aan bestaande alsook nieuwe categorieën hangt, het enige tijdstip waarop je deze wijzigingen kunt doorvoeren is dan tijdens een import? Of wat als je een indeling wat wilt omgooien, hoe ga je dat dan doen, al helemaal als het producten betreft die al geïmporteerd zijn? Je wilt eigenlijk niet dat je productconfiguratie (jouw eigen, site-specifieke, productconfiguratie dus) compleet gekoppeld is aan / afhankelijk is van een import.

Zou het eigenlijk niet veel logischer zijn dat je zelf alles eenmalig inregelt met keywords, en dat je dan in een aparte routine op een knop drukt die alle associaties in product_to_category weggooit en opnieuw opbouwt met de zelf opgestelde regels?
Gewijzigd op 31/05/2020 00:20:31 door Thomas van den Heuvel
 
Michael vanDijk

Michael vanDijk

31/05/2020 08:13:29
Quote Anchor link
Quote:
Zou het eigenlijk niet veel logischer zijn dat je zelf alles eenmalig inregelt met keywords, en dat je dan in een aparte routine op een knop drukt die alle associaties in product_to_category weggooit
en opnieuw opbouwt met de zelf opgestelde regels?

Dit zou helemaal mooi zijn

De rest is allemaal geregeld. SEO woorden en in opencart.

Deze code werkt al anderhalf jaar goed. De import gaat ook perfect en de producten worden netjes gekoppeld. Dit draait op een live site perfect ik ben alleen de api een beetje aan het aanpassen en daarom kom ik dit soort dingen tegen die wellicht beter kunnen.

Maar ik kom geen stap verder zo door iedere keer mezelf maar te verdedigen. ????

Ik wil heel graag dat stukje voor de categorieën aanpassen want er werd hier geroepen dit kan veel beter en makkelijker. Laten we dan ook dat stukje aanpassen. In plaats van dat ik iedere keer moet uitleggen waar het voor is en wat ik wil bereiken enz.

Ik vindt jullie hulp echt super begrijp me niet verkeerd. Maar heb nog geen enkele beweging gezien richting een oplossing.
Gewijzigd op 31/05/2020 09:59:13 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

31/05/2020 13:00:36
Quote Anchor link
Michael vanDijk op 31/05/2020 08:13:29:
verdedigen

Dit is niet echt een verdediging, maar meer een toelichting van jouw zijde om inzage te krijgen in hoe jouw aanpassingen ingrijpen in opencart, en hoe deze afwijken van het standaard gedrag, om zo een beeld te vormen van de huidige werking, zodat wij wijzigingen kunnen voorstellen die hetzelfde doen, maar dan op een makkelijkere manier.

Michael vanDijk op 31/05/2020 08:13:29:
Ik wil heel graag dat stukje voor de categorieën aanpassen want er werd hier geroepen dit kan veel beter en makkelijker. Laten we dan ook dat stukje aanpassen. In plaats van dat ik iedere keer moet uitleggen waar het voor is en wat ik wil bereiken enz.

Slimme(re) oplossingen vragen ook om slimme(re) code. Je zult dus eerst na moeten denken over de werking, dan een ontwerp moeten opstellen, en dan pas gaan bouwen. Voordat we gaan rennen is het misschien handig om eerst te weten waar je naartoe rent?

Michael vanDijk op 31/05/2020 08:13:29:
Ik vindt jullie hulp echt super begrijp me niet verkeerd. Maar heb nog geen enkele beweging gezien richting een oplossing.

Uhm, volgens mij heb ik in mijn vorige reactie een idee voorgesteld en ook een bijbehorende motivatie gegeven waarom ik het zo zou aanpakken? Je geeft in je reactie zelf aan dat dit "helemaal mooi zou zijn". Volgens mij zijn we al een heel eind? Je zult dus een soort module moeten bouwen voor het beheer van de sleutelwoorden, deze aan de categorieën kunnen ophangen en dan een soort van routine hebben die dan door je producten heenrent, specifieke informatie uitleest en deze matcht met de sleutelwoorden, en dan een koppeling maakt met de daaraan gelinkte categorieën. Mogelijk moet je daarbij nog onderscheid maken tussen categorieën die op deze manier zijn toegekend, en categorieën die je daar buitenom sowieso aan je product wilt hangen, zodat deze koppelingen niet verloren gaan op het moment dat je alle associaties "reset". Misschien niet helemaal netjes, maar de makkelijkste manier is wellicht een kolom toevoegen aan product_to_category (bijvoorbeeld een bools veld assigned_by_tag ofzo). Moet je wel opletten met upgrades en dergelijke dus dat zal je ergens in documentatie moeten zetten ofzo.

Maareh, met het bovenstaande heb je in wezen een complete blauwdruk voor een oplossing waarbij je het overzicht kunt houden via interfaces, in plaats van lopen te modderen in code waarbij dit tevens is ontkoppeld van je import.

Hoe is dit geen "beweging richting een oplossing"? Ik zal de eerste zijn die zal toegeven weinig tot geen verstand te hebben van opencart, dus als iemand anders een beter idee heeft, be my guest.

Of als je aan dit soort mijmeringen geen boodschap hebt, koop dan een extensie en kijk of dat soelaas biedt, en neem daarbij genoegen met het feit dat het mogelijk niet 100% past omdat het geen maatwerk is die precies aansluit bij de manier waarop jij jouw opencart site hebt ingericht.
Gewijzigd op 31/05/2020 13:09:54 door Thomas van den Heuvel
 
Ivo P

Ivo P

31/05/2020 13:31:47
Quote Anchor link
ik zie op verschillende plaatsen in je code 21% BTW staan.

a) dat zou je al niet op moeten slaan: zonder BTW opslaan en dan later op het moment dat je het nodig hebt het juiste BTW percentage op los laten.

b) als je het al incl. btw wilt opslaan: zet dat buiten je code in een constante: vanaf dat ik op het VWO bij economie II te horen kreeg over BTW is het percentage al zeker 4 keer veranderd. Ik herinner me 18, 18.5 19 en 21%.
Dan wil je niet opnieuw door je code heen.

EN dat is dus ook een reden om je prijzen niet incl btw op te slaan.
Als Rutte morgen zegt dat de BTW naar 25% gaat, moet je niet heel je database door moeten gaan om alles aan te passen.
CONST BTWPERC = 25;
zou moeten voldoen.


--
en dit geldt vast ook wel voor meer constanten
 
Michael vanDijk

Michael vanDijk

01/06/2020 08:19:12
Quote Anchor link
Ivo P op 31/05/2020 13:31:47:
ik zie op verschillende plaatsen in je code 21% BTW staan.

a) dat zou je al niet op moeten slaan: zonder BTW opslaan en dan later op het moment dat je het nodig hebt het juiste BTW percentage op los laten.

b) als je het al incl. btw wilt opslaan: zet dat buiten je code in een constante: vanaf dat ik op het VWO bij economie II te horen kreeg over BTW is het percentage al zeker 4 keer veranderd. Ik herinner me 18, 18.5 19 en 21%.
Dan wil je niet opnieuw door je code heen.

EN dat is dus ook een reden om je prijzen niet incl btw op te slaan.
Als Rutte morgen zegt dat de BTW naar 25% gaat, moet je niet heel je database door moeten gaan om alles aan te passen.
CONST BTWPERC = 25;
zou moeten voldoen.


--
en dit geldt vast ook wel voor meer constanten


dit is alleen om een mooie afgeronde prijs te krijgen aangezien alle prijzen allemaal rare prijzen zijn zoals 12.61 enz. dus nu wordt dit netjes afgerond en werkt perfect.



Toevoeging op 01/06/2020 08:25:52:

Thomas van den Heuvel op 31/05/2020 13:00:36:
Michael vanDijk op 31/05/2020 08:13:29:
verdedigen

Dit is niet echt een verdediging, maar meer een toelichting van jouw zijde om inzage te krijgen in hoe jouw aanpassingen ingrijpen in opencart, en hoe deze afwijken van het standaard gedrag, om zo een beeld te vormen van de huidige werking, zodat wij wijzigingen kunnen voorstellen die hetzelfde doen, maar dan op een makkelijkere manier.

Michael vanDijk op 31/05/2020 08:13:29:
Ik wil heel graag dat stukje voor de categorieën aanpassen want er werd hier geroepen dit kan veel beter en makkelijker. Laten we dan ook dat stukje aanpassen. In plaats van dat ik iedere keer moet uitleggen waar het voor is en wat ik wil bereiken enz.

Slimme(re) oplossingen vragen ook om slimme(re) code. Je zult dus eerst na moeten denken over de werking, dan een ontwerp moeten opstellen, en dan pas gaan bouwen. Voordat we gaan rennen is het misschien handig om eerst te weten waar je naartoe rent?

ik weet de werking en ik weet waar ik naar toe wil, alleen ik weet niet hoe ik dat kan realiseren en ik dacht dat hiervoor dit forum was.


Michael vanDijk op 31/05/2020 08:13:29:
Ik vindt jullie hulp echt super begrijp me niet verkeerd. Maar heb nog geen enkele beweging gezien richting een oplossing.

Uhm, volgens mij heb ik in mijn vorige reactie een idee voorgesteld en ook een bijbehorende motivatie gegeven waarom ik het zo zou aanpakken? Je geeft in je reactie zelf aan dat dit "helemaal mooi zou zijn". Volgens mij zijn we al een heel eind? Je zult dus een soort module moeten bouwen voor het beheer van de sleutelwoorden, deze aan de categorieën kunnen ophangen en dan een soort van routine hebben die dan door je producten heenrent, specifieke informatie uitleest en deze matcht met de sleutelwoorden, en dan een koppeling maakt met de daaraan gelinkte categorieën. Mogelijk moet je daarbij nog onderscheid maken tussen categorieën die op deze manier zijn toegekend, en categorieën die je daar buitenom sowieso aan je product wilt hangen, zodat deze koppelingen niet verloren gaan op het moment dat je alle associaties "reset". Misschien niet helemaal netjes, maar de makkelijkste manier is wellicht een kolom toevoegen aan product_to_category (bijvoorbeeld een bools veld assigned_by_tag ofzo). Moet je wel opletten met upgrades en dergelijke dus dat zal je ergens in documentatie moeten zetten ofzo.
upgraden is geen probleem aangezien het twee aparte bestanden zijn los van opencart en ik deze zo kan plaatsen. mits ik het allemaal dus in mijn api bestanden houdt, daarom wil ik het dus op deze manier doen. alles werkt al alleen het is nu omslachtig

Maareh, met het bovenstaande heb je in wezen een complete blauwdruk voor een oplossing waarbij je het overzicht kunt houden via interfaces, in plaats van lopen te modderen in code waarbij dit tevens is ontkoppeld van je import.
het idee heb ik nu wel wat er moet gebeuren, probleem is alleen dat ik met de code niet uit kom.

Hoe is dit geen "beweging richting een oplossing"? Ik zal de eerste zijn die zal toegeven weinig tot geen verstand te hebben van opencart, dus als iemand anders een beter idee heeft, be my guest.

Of als je aan dit soort mijmeringen geen boodschap hebt, koop dan een extensie en kijk of dat soelaas biedt, en neem daarbij genoegen met het feit dat het mogelijk niet 100% past omdat het geen maatwerk is die precies aansluit bij de manier waarop jij jouw opencart site hebt ingericht.


er is geen extensie voor, en de api die nu draait werkt goed, ik wil alleen wat dingen toevoegen en aanpassen waarom zou ik naar iets anders toe gaan als wat er is goed is. maar misschien alleen wat beter kan.
 
Ozzie PHP

Ozzie PHP

01/06/2020 15:07:05
Quote Anchor link
>> dit is alleen om een mooie afgeronde prijs te krijgen aangezien alle prijzen allemaal rare prijzen zijn zoals 12.61 enz. dus nu wordt dit netjes afgerond en werkt perfect.

Ik zou de reactie van Ivo P nog een keer goed doorlezen, want wat hij zegt heeft helemaal niks te maken met 'mooie afgeronde prijzen'. Als niet duidelijk is wat hij bedoelt, vraag het dan gewoon. Het is namelijk wel een goede tip.
Gewijzigd op 01/06/2020 15:07:46 door Ozzie PHP
 
Michael vanDijk

Michael vanDijk

01/06/2020 15:34:31
Quote Anchor link
Ozzie PHP op 01/06/2020 15:07:05:
>> dit is alleen om een mooie afgeronde prijs te krijgen aangezien alle prijzen allemaal rare prijzen zijn zoals 12.61 enz. dus nu wordt dit netjes afgerond en werkt perfect.

Ik zou de reactie van Ivo P nog een keer goed doorlezen, want wat hij zegt heeft helemaal niks te maken met 'mooie afgeronde prijzen'. Als niet duidelijk is wat hij bedoelt, vraag het dan gewoon. Het is namelijk wel een goede tip.


Ik snap wat er bedoelt wordt. Alleen is het een kleine moeite om in die twee bestanden de BTW ff aan te passen.

Ik wil eerst het andere oplossen. Dit soort dingen werkt gewoon goed en is voor nu perfect.

Jammer alleen dat ik met de echte uitdaging geen stap verder kom. En dat is de keywords makkelijker en overzichtelijk maken.
 
Thomas van den Heuvel

Thomas van den Heuvel

01/06/2020 16:54:31
Quote Anchor link
Michael vanDijk op 01/06/2020 08:19:12:
er is geen extensie voor, en de api die nu draait werkt goed, ik wil alleen wat dingen toevoegen en aanpassen waarom zou ik naar iets anders toe gaan als wat er is goed is. maar misschien alleen wat beter kan.


Michael vanDijk op 01/06/2020 15:34:31:
Ik snap wat er bedoelt wordt. Alleen is het een kleine moeite om in die twee bestanden de BTW ff aan te passen.

Ik wil eerst het andere oplossen. Dit soort dingen werkt gewoon goed en is voor nu perfect.

Jammer alleen dat ik met de echte uitdaging geen stap verder kom. En dat is de keywords makkelijker en overzichtelijk maken.


De enige reactie die ik hierop kan geven is:

Bruh.

Je wilt dingen veranderen, maar je wilt niets aanpassen. Is dat niet een beetje extreem paradoxaal? Je lijkt niet bereid om te doen wat noodzakelijk is. Alles wat een goed idee lijkt schuif je voor je uit. Je zou kunnen stellen dat dat exact de reden is dat je op dit punt bent belandt waarbij het tijd wordt om al die technical debt eens in te lossen.

The problem is not the problem, the problem is your attitude about the problem.
 
Ozzie PHP

Ozzie PHP

02/06/2020 01:28:30
Quote Anchor link
Michael vanDijk op 01/06/2020 15:34:31:
Ik snap wat er bedoelt wordt. Alleen ...

Alleen doe je er niks mee?

Je moet het zelf weten hoor. Je snijdt alleen jezelf in je vingers door op deze manier te werk te gaan. Dan heb ik het nog niet over het feit dat je de prijs eerst met 21% manipuleert, en vervolgens opslaat in de database.

Anyhow, succes.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.