Post by shade_wo » Fri Feb 15, 2019 7:16 pm

Unele produse au prețul per bucată, altele per metru pătrat, altele au prețul în lei / m liniar. Cum pot să modific? Sunt în perioada de învățare, am instalat v. 3.0.2.0.

Mulțumesc mult de tot.

Newbie

Posts

Joined
Wed Jan 30, 2019 8:37 pm

Post by medvi » Sat Feb 16, 2019 3:14 am

Asa de simplu nu se poate. Din acest motiv exista extensii, dezvoltatori.
Probabil ca nu vreti sa porniti o afacere.
Doar va jucati cu OpenCart.
Spor ...

Image
If you have any questions or want solutions to your problems, please email: support@medvicompany.ro


Active Member

Posts

Joined
Wed Mar 04, 2015 12:29 am
Location - Bucuresti

Post by utzy » Mon Feb 25, 2019 10:59 pm

shade_wo wrote:
Fri Feb 15, 2019 7:16 pm
Unele produse au prețul per bucată, altele per metru pătrat, altele au prețul în lei / m liniar. Cum pot să modific? Sunt în perioada de învățare, am instalat v. 3.0.2.0.

Mulțumesc mult de tot.
Puteti crea Optiuni si le denumiti cum vreti.

User avatar
Active Member

Posts

Joined
Fri Nov 25, 2011 5:59 am

Post by selmark.advertising » Mon Feb 25, 2019 11:01 pm

@shade_wo
Te vei familiariza cu opencart si vei intelege ca poti face aproape orice cu aceasta platforma. Felicitari pentru alegere!

Referitor la intrebare, se impune alegerea "tipului de pret", sau mai bine spus alegerea unei unitati de masura.
Exemplu: vreau sa vand material textil, unitatea de masura este metru liniar, pretul este de 12 ron / metru liniar

Am de facut 3 operatii: modificare in baza de date, modificare pentru partea de admin (sau "backend"), modificare pentru partea de catalog (ce vad vizitatorii - denumit si "catalog" sau "front")

Baza de date
===========
Voi crea in baza de date o coloana noua in tabelul oc_product (presupun ca prefixul ales la instalare a fost cel implicit - "oc_"):
cPanel -> phpMyAdmin -> baza_de_date_opencart -> oc_product -> structura -> adaugare coloana (ideal dupa coloana price)
nume coloana: price_type
tip: INT

Codul SQL ar fi:

Code: Select all

ALTER TABLE `oc_product` ADD `price_type` INT NOT NULL AFTER `price`;
Admin
===========
* Limba
Editez fisierele pentru limba:
admin/language/cod_limba_aici/catalog/product.php
si adaug descrierea pentru noua optiune ca text dupa

Code: Select all

<?php
in variabila $_ (in PHP se poate folosi underscore ca variabila)

Code: Select all

$_['text_price_type'] = 'Tip pret';
Si apoi adaug lista de optiuni

Code: Select all

$_['text_price_type_list'] = array('nespecificat', 'metru liniar', 'metru patrat', 'cutie', 'bucata', 'pachet', 'bax');

* Model
Editez fisierul pentru model (Opencart este o platforma de tip MVC - model - view - controller; modelul este cel care "leaga" partea de procesare la partea de stocare a informatiei - baza de date)
Adaug o noua egalitate in cod imediat dupa egalitatea pentru price. Stiu ca price este folosit pentru pret, deci ce vreau eu sa adaug ar cam trebui sa fie pus tot pe-acolo. Am stabilit in baza de date ca tipul coloanei este INT (numar intreg), deci voi transforma valoarea cheii price_type intr-o valoare numerica de tip numar intreg inainte de a insera in baza de date pentru a ma asigura ca se salveaza corect. Dupa:

Code: Select all

price = '" . (float)$data['price'] . "',
pun:

Code: Select all

price_type= '" . (int)$data['price_type'] . "',
* Controller
Controller-ul este cel care face partea de procesare propriu-zisa, dar nu este o regula (procesarea se poate face si in model). Controller-ul imi permite sa ma "leg" la fisiere de limba sau la modele, imi permite sa apelez functii si sa primesc informatie ca raspuns.
Editez fisierul

Code: Select all

admin/controller/catalog/product.php
Caut sa pun in cod informatie pentru noua mea coloana tot undeva unde se "intampla" ceva cu price, consider ca ar fi cam inainte de

Code: Select all

if (isset($this->request->post['price'])) {
Adaug:

Code: Select all

if (isset($this->request->post['price_type'])) {
	$data['price_type'] = $this->request->post['price_type'];
} elseif (!empty($product_info)) {
	$data['price_type'] = $product_info['price_type'];
} else {
	$data['price_type'] = 0;
}
* View
Asa cum spuneam ca o completare mai sus, Opencart este o platforma de tip MVC. Partea de View reprezinta sablonul folosit pentru a reda informatie apelantului. Limbajul folosit este twig si este foarte usor de deprins.
Ca la controller si model, voi cauta sa pun cod undeva unde este price pentru a pastra o legatura logica cu intentia mea initiala (vreau sa spun ce tip de pret este). Voi edita:

Code: Select all

admin/view/template/catalog/product/product_form.twig
Voi cauta

Code: Select all

{{ price }}
si voi pune 3 randuri mai sus codul:

Code: Select all

<div class="form-group">
	<label class="col-sm-2 control-label" for="select-price_type">{{ text_price_type }}</label>
	<div class="col-sm-10">
		<select name="price_type" value="{{ price_type }}" id="select-price_type" class="form-control" />
			{% for item in text_price_type_list %}
			{% set isSelected = price_type == loop.index0 ? 'selected="selected"' : '' %}
			<option value="{{ loop.index0 }}" {{ isSelected }}>{{ item }}</option>
			{% endfor %}
		</select>
	</div>
</div>
Pare limba chineza, dar nu este. Engleza si putina logica, nimic mai mult. Am elemente HTML, clase Bootstrap pentru efect vizual si putin twig. De observat ca folosec o prescurtare pentru a stabili care dintre optiuni este selectata.

Am terminat in admin, trecem la...

Front
===========
Am de editat destul de mult, dar mergem din aproape in aproape. Incepem cu ideea ca vrem sa vedem "metru liniar" la un produs.

* Model
Incep tot cu modelul de dragul exemplului.

Code: Select all

catalog/model/catalog/product.php
Caut pe unde ar fi ceva legat de price, deci voi pune ceva inainte de

Code: Select all

=> ($query->row['discount'] ? $query->row['discount'] : $query->row['price']),
pentru ca aceasta bucata de cod nu se mai repeta in fisierul acesta. Adaug:

Code: Select all

'price_type' => $query->row['price_type'],
* Controller

Code: Select all

catalog/controller/product/product.php
Adaug cu 1 rand inainte de

Code: Select all

$data['price'] = $this->currency->format
codul:

Code: Select all

$data['price_type'] = $product_info['price_type'];
Caut de sus pana jos, imi dau seama ca trebuie sa afisez "metru liniar" pentru produse cand sunt intr-un fel de "previzualizare minima" (cand apar doar poza, numele, pretul si posibilitatea de a adauga in cos, la favorite sau comparare). Observatia o fac cam pe la linia de cod care contine:

Code: Select all

$data['products'][] = array(
Ramane sa ma mai gandesc...

Pentru produsele relationate caut:

Code: Select all

=> $special,
adaug:

Code: Select all

'price_type' => $result['price_type'],
* Language

Code: Select all

catalog/language/cod_limba_aici/product/product.php
Pun lista de valori posibile dupa

Code: Select all

<?php
:

Code: Select all

$_['text_price_type_list'] = array('', 'metru liniar', 'metru patrat', 'cutie', 'bucata', 'pachet', 'bax');
Revin la observatia facuta in controller. Acum presupun ca acest tip de pret ar trebui afisat si in listele de produse (categorii, search, speciale, produsele producatorului, extensii), doar ca l-as vrea prescurtat cumva la unele dintre acele texte. Pun o lista de texte scurte in fisierul de limba:

Code: Select all

$_['text_price_type_list_short'] = array('', 'ml', 'm<sup>2</sup>', 'cutie', 'buc', 'pac.', 'bax');
* View
Editam fisierul din tema implicita Opencart:

Code: Select all

catalog/view/theme/default/template/product/product.twig
Trebuie sa pun "metru liniar" sau "/ metru liniar" sau " pe metru liniar" dupa pretul produsului. Aleg " / metru liniar" pentru claritatea informatiei. Adaug dupa

Code: Select all

<h2>{{ price }}

Code: Select all

{% if price_type > 0 %} / {{ text_price_type_list.price_type }}{% endif %}
La fel si in cazul pretului special unde adaug dupa

Code: Select all

<h2>{{ special }}
:

Code: Select all

{% if price_type > 0 %} / {{ text_price_type_list.price_type }}{% endif %}
Completez pentru produsele similare de pe pagina de produs, adaug dupa

Code: Select all

{{ product.price }}
Codul:

Code: Select all

{% if product.price_type > 0 %} / {{ text_price_type_list_short.[product.price_type] }}{% endif %}
Fac la fel si in cazul in care am pret special la aceste produse special. Adaug dupa

Code: Select all

{{ product.special }}
Codul:

Code: Select all

{% if product.price_type > 0 %} / {{ text_price_type_list_short.[product.price_type] }}{% endif %}
Acesta ar trebui sa fie punctul de pornire pentru a afisa tipul de pret si in alte locuri din opencart. Succes!


Posts

Joined
Mon Feb 25, 2019 6:53 pm

Post by shade_wo » Fri Mar 15, 2019 6:23 pm

Stiam eu ca nu e simplu :) Multumesc foarte mult. Din pacate, cred ca nu voi avea timp sa invat OC numai pentru proiectul acesta. Eu in mod normal folosesc WooCommerce care desi mai slab, a fost suficient pentru mine.

Voi avea nevoie sa recomand clientului un dezvoltator de OC care sa ii termine proiectul. Va rog sa ma sfatuiti cum/unde sa caut. Clientul este o mica fabrica de produse de lemn din Resita, patronii sunt italieni.

Newbie

Posts

Joined
Wed Jan 30, 2019 8:37 pm
Who is online

Users browsing this forum: No registered users and 144 guests