Trovaprodotti Core: differenze tra le versioni
| (21 versioni intermedie di uno stesso utente non sono mostrate) | |||
| Riga 7: | Riga 7: | ||
== Manufacturer Custom == | == Manufacturer Custom == | ||
Il negozio potrà inserire i propri Marchi specificando: ''Nome'', ''Immagine/Logo'' e se sarà in ''evidenza'' nella pagine di elenco dei Marchi. | Il negozio potrà inserire i propri Marchi specificando: ''Nome'', ''Immagine/Logo'' e se sarà in ''evidenza'' nella pagine di elenco dei Marchi.<br/> | ||
L'immagine non sarà obbligatoria se il manufacturer nuovo verrà assegnato solo ad occasioni. Se invece verrà assegnato a prodotti a catalogo custom, il suo logo apparirà nel listing dei brand. | |||
== Category Custom == | == Category Custom == | ||
| Riga 21: | Riga 21: | ||
Questa ''unione'' viene implementata tramite una '''scalar function''' che prende in input il ''contesto''.<br/><br/> | Questa ''unione'' viene implementata tramite una '''scalar function''' che prende in input il ''contesto''.<br/><br/> | ||
=== Esempio Pratico === | |||
volendo aggiungere nuovi Manufacturer solo per il Trovaprodotti di <code>PincoPallino (id 1111)</code>,<br/> | volendo aggiungere nuovi Manufacturer solo per il Trovaprodotti di <code>PincoPallino (id 1111)</code>,<br/> | ||
basterà utilizzare una funzione <code>ManufacturerExt(1111) AS Manufacturer</code> e fare le query come se ci trovassimo nel pool di Designbest.<br/><br/> | basterà utilizzare una funzione <code>ManufacturerExt(1111) AS Manufacturer</code> e fare le query come se ci trovassimo nel pool di Designbest.<br/><br/> | ||
| Riga 36: | Riga 36: | ||
<code>ManufacturerExt(1111)</code> , tramite il campo <code>@Core</code> è in grado di sapere se si trova nel contesto specifico oppure nel core Designbest. | <code>ManufacturerExt(1111)</code> , tramite il campo <code>@Core</code> è in grado di sapere se si trova nel contesto specifico oppure nel core Designbest. | ||
=== Ambiguità degli ID === | ==== Ambiguità degli ID ==== | ||
A causa dell''''ambiguità degli ID''' (i nuovi possono collidere con quelli del core, non c'è univocità),<br/> | A causa dell''''ambiguità degli ID''' (i nuovi possono collidere con quelli del core, non c'è univocità),<br/> | ||
ad ogni <code>JOIN</code> con le tabelle ''Ext'' è necessario specificare il parametro <code>@Core</code> per specificare se si tratta di record custom del contesto oppure di record di Designbest.<br/><br/> | ad ogni <code>JOIN</code> con le tabelle ''Ext'' è necessario specificare il parametro <code>@Core</code> per specificare se si tratta di record custom del contesto oppure di record di Designbest.<br/><br/> | ||
Nel caso di una '''GET dei Manufacturer''', i recordset avranno sempre il campo <code>@Core</code> che indica se il manu in questione è di Designbest o un custom manu del contesto corrente.<br/> | Nel caso di una '''GET dei Manufacturer''', i recordset avranno sempre il campo <code>@Core</code> che indica se il manu in questione è di Designbest o un custom manu del contesto corrente.<br/> | ||
In questo modo il frontend sarà in grado di mostrare la scheda prodotto con la coppia <code>@ID INT, @Core BIT</code>.< | In questo modo il frontend sarà in grado di mostrare la scheda prodotto con la coppia <code>@ID INT, @Core BIT</code>. | ||
<syntaxhighlight lang="sql"> | |||
SELECT Nome, SeoNome, Descrizione, Core | |||
FROM ManufacturerExt(1111) AS Manufacturer | |||
</syntaxhighlight> | |||
Per ogni riga di risultato, l'applicativo sa se il prodotto è del contesto (<code>Core = 0</code>) o di Designbest (<code>Core = 1</code>) | |||
<br/> | |||
Nel caso di un '''FILTRO dei Manufacturer''', nella <code>WHERE</code> è sempre necessario specificare se stiamo cercando tra i custom record del contesto o in Designbest specificando il parametro <code>Core</code> | Nel caso di un '''FILTRO dei Manufacturer''', nella <code>WHERE</code> è sempre necessario specificare se stiamo cercando tra i custom record del contesto o in Designbest specificando il parametro <code>Core</code> | ||
<syntaxhighlight lang="sql"> | |||
SELECT Nome, SeoNome, Descrizione, Core | |||
FROM ManufacturerExt(1111) AS Manufacturer | |||
WHERE Manufacturer.ID = 275 AND Manufacturer.Core = @FromCore | |||
</syntaxhighlight> | |||
Necessario il parametro booleano <code>@FromCore</code> per suggerire di cercare dentro i custom record del contesto o dentro al core Designbest<br/><br/> | |||
=== Tabelle estese === | |||
Al momento, per '''Trovaprodotti''' abbiamo esteso le seguenti tabelle | |||
<table class="wikitable sortable"> | |||
<tr> | |||
<th>Tabella estesa</th> | |||
<th>Funzione di unione</th> | |||
</tr> | |||
<tr> | |||
<td><code>Product_Ext</code></td> | |||
<td rowspan="2"><code>ProductExt(@ContextID INT, @LanguageID INT = 1)</code></td> | |||
</tr> | |||
<tr> | |||
<td><code>ProductCulture_Ext</code></td> | |||
</tr> | |||
<tr> | |||
<td><code>ProductThumbs_Ext</code></td> | |||
<td><code>ProductThumbsExt(@ContextID INT, @LanguageID INT = 1)</code></td> | |||
</tr> | |||
<tr> | |||
<td><code>Manufacturer_Ext</code></td> | |||
<td><code>ManufacturerExt(@ContextID INT)</code></td> | |||
</tr> | |||
<tr> | |||
<td><code>Mapping_ShopPoint_Manufacturer_Ext</code></td> | |||
<td><code>Mapping_ShopPoint_ManufacturerExt(@ContextID INT)</code></td> | |||
</tr> | |||
<tr> | |||
<td><code>Category_Ext</code></td> | |||
<td><code>CategoryExt(@ContextID INT)</code></td> | |||
</tr> | |||
<tr> | |||
<td><code>LocalizedProperty_Ext</code></td> | |||
<td><code>LocalizedPropertyExt(@ContextID INT, @LocaleKeyGroup NVARCHAR(100), @LocaleKey NVARCHAR(100), @LanguageID INT = 1)</code></td> | |||
</tr> | |||
<tr> | |||
<td><code>Picture_Ext</code></td> | |||
<td><code>PictureExt(@ContextID INT, @LocaleKeyGroup NVARCHAR(100), @LocaleKey NVARCHAR(100))</code></td> | |||
</tr> | |||
<tr> | |||
<td><code>FT_Products_IT_Ext</code></td> | |||
<td><code>FT_Products_ItExt(@ContextID INT)</code></td> | |||
</tr> | |||
<tr> | |||
<td><code>FT_Products_EN_Ext</code></td> | |||
<td><code>FT_Products_EnExt(@ContextID INT)</code></td> | |||
</tr> | |||
<tr> | |||
<td><code>FT_Products_FR_Ext</code></td> | |||
<td><code>FT_Products_FrExt(@ContextID INT)</code></td> | |||
</tr> | |||
<tr> | |||
<td><code>FT_Products_DE_Ext</code></td> | |||
<td><code>FT_Products_DeExt(@ContextID INT)</code></td> | |||
</tr> | |||
</table> | |||
=== Estensione delle picture === | |||
La tabella <code>Picture_Ext</code> permette di estendere le immagini, ma il folder del file system è unico per tutte (core e non),<br/> | |||
perciò non possiamo mantenere lo stesso schema di generazione dei nomi.<br/> | |||
Quando creiamo una nuova picture per | |||
* Prodotto custom | |||
* Category custom | |||
* Manufacturer custom | |||
è necessario ricordarsi che nel campo <code>Picture.EntityValue</code> bisogna mettere | |||
* <code>productext-<contextid></code> | |||
* <code>categoryext-<contextid></code> | |||
* <code>manufacturerext-<contextid></code> | |||
== Struttura delle url == | |||
Ecco una ipotesi<br/> | |||
HOMEPAGE | |||
* <code>/it/44334</code> - ''hp'' | |||
LISTING DA AMBIENTE | |||
* <code>/it/44334/catalog/ambient-16_1</code> - ''ambiente'' obbligatorio | |||
* <code>/it/44334/catalog/ambient-16_1/type-48_1</code> - ''ambiente/tipo'' | |||
* <code>/it/44334/catalog/ambient-16_1/brand-275_1</code> - ''ambiente/manu'' | |||
* <code>/it/44334/catalog/ambient-16_1/type-48_1/brand-275_1</code> - ''ambiente/tipo/manu'' | |||
LISTING DA MANU | |||
* <code>/it/44334/brands</code> | |||
* <code>/it/44334/brand-275_1</code> - ''manu'' | |||
* <code>/it/44334/brand-275_1/ambient-16_1</code> - ''manu/ambiente'' | |||
* <code>/it/44334/brand-275_1/ambient-16_1/type-48_1</code> - ''manu/ambiente/tipo (duplicata)'' | |||
LISTING NEWS | |||
* <code>/it/44334/news</code> | |||
* <code>/it/44334/news/ambient-16_1</code> | |||
* <code>/it/44334/news/brand-275_1</code> | |||
* <code>/it/44334/news/ambient-16_1/brand-275_1</code> | |||
LISTING SEARCH | |||
* <code>/it/44334/search</code> | |||
LISTING OCCASIONI | |||
* <code>/it/44334/offers</code> - ''tutte'' | |||
* <code>/it/44334/offers/ambient-16_1</code> - ''ambiente'' | |||
* <code>/it/44334/offers/ambient-16_1/type-48_1</code> - ''ambiente/tipo'' | |||
* <code>/it/44334/offers/ambient-16_1/brand-275_1</code> - ''ambiente/manu'' | |||
* <code>/it/44334/offers/ambient-16_1/type-48_1/brand-275_1</code> - ''ambiente/tipo/manu'' | |||
Versione attuale delle 08:06, 28 giu 2023
Il negozio dalla sua backoffice ClientAdmin avrà la possibilità di creare un prodotto a Catalogo valido solo per il suo Trovaprodotti oppure un prodotto Occasione che potrà essere visibile su DesignbestOutlet, Commerce e Trovaprodotti.
Il negozio potrà
- aggiungere propri Manufacturer
- aggiungere propri Ambienti
- aggiungere proprie Tipologie nei nuovi ambienti o in ambienti già esistenti
Manufacturer Custom
[modifica]Il negozio potrà inserire i propri Marchi specificando: Nome, Immagine/Logo e se sarà in evidenza nella pagine di elenco dei Marchi.
L'immagine non sarà obbligatoria se il manufacturer nuovo verrà assegnato solo ad occasioni. Se invece verrà assegnato a prodotti a catalogo custom, il suo logo apparirà nel listing dei brand.
Category Custom
[modifica]Il negozio potrà inserire tipologie proprie specificando: Nome tipo e Ambiente di appartenenza (che può essere a sua volta custom o esistente).
Strategia di Estensione Contestuale
[modifica]Per evitare di creare delle logiche circostanziali, poco elastiche e di elevata manutenzione abbiamo deciso di adottare un paradigma simile all'estensione delle classi nella programmazione ad oggetti.
In pratica estendiamo le tabelle esistenti, cioè ne creiamo una copia che abbia un campo Context che identifichi il contesto di appartenenza (es. un Trovaprodotti specifico).
Il contesto rappresenta l'unione delle due tabelle (normale + nomale_ext) come se fossero un'unica tabella integrata nelle logiche Core.
Questa unione viene implementata tramite una scalar function che prende in input il contesto.
Esempio Pratico
[modifica]volendo aggiungere nuovi Manufacturer solo per il Trovaprodotti di PincoPallino (id 1111),
basterà utilizzare una funzione ManufacturerExt(1111) AS Manufacturer e fare le query come se ci trovassimo nel pool di Designbest.
In questo caso ManufacturerExt(1111) rappresenta la somma di tutti i manufacturer di Designbest + quelli custom che sono stati aggiunti dal contesto n° 1111
ManufacturerExt(1111) =
SELECT Campo1, Campo2, Campo3, 1 AS Core FROM Manufacturer
UNION
SELECT Campo1, Campo2, Campo3, 0 AS Core FROM Manufacturer_Ext WHERE Context = 1111
ManufacturerExt(1111) , tramite il campo @Core è in grado di sapere se si trova nel contesto specifico oppure nel core Designbest.
Ambiguità degli ID
[modifica]A causa dell'ambiguità degli ID (i nuovi possono collidere con quelli del core, non c'è univocità),
ad ogni JOIN con le tabelle Ext è necessario specificare il parametro @Core per specificare se si tratta di record custom del contesto oppure di record di Designbest.
Nel caso di una GET dei Manufacturer, i recordset avranno sempre il campo @Core che indica se il manu in questione è di Designbest o un custom manu del contesto corrente.
In questo modo il frontend sarà in grado di mostrare la scheda prodotto con la coppia @ID INT, @Core BIT.
SELECT Nome, SeoNome, Descrizione, Core
FROM ManufacturerExt(1111) AS Manufacturer
Per ogni riga di risultato, l'applicativo sa se il prodotto è del contesto (Core = 0) o di Designbest (Core = 1)
Nel caso di un FILTRO dei Manufacturer, nella WHERE è sempre necessario specificare se stiamo cercando tra i custom record del contesto o in Designbest specificando il parametro Core
SELECT Nome, SeoNome, Descrizione, Core
FROM ManufacturerExt(1111) AS Manufacturer
WHERE Manufacturer.ID = 275 AND Manufacturer.Core = @FromCore
Necessario il parametro booleano @FromCore per suggerire di cercare dentro i custom record del contesto o dentro al core Designbest
Tabelle estese
[modifica]Al momento, per Trovaprodotti abbiamo esteso le seguenti tabelle
| Tabella estesa | Funzione di unione |
|---|---|
Product_Ext |
ProductExt(@ContextID INT, @LanguageID INT = 1) |
ProductCulture_Ext |
|
ProductThumbs_Ext |
ProductThumbsExt(@ContextID INT, @LanguageID INT = 1) |
Manufacturer_Ext |
ManufacturerExt(@ContextID INT) |
Mapping_ShopPoint_Manufacturer_Ext |
Mapping_ShopPoint_ManufacturerExt(@ContextID INT) |
Category_Ext |
CategoryExt(@ContextID INT) |
LocalizedProperty_Ext |
LocalizedPropertyExt(@ContextID INT, @LocaleKeyGroup NVARCHAR(100), @LocaleKey NVARCHAR(100), @LanguageID INT = 1) |
Picture_Ext |
PictureExt(@ContextID INT, @LocaleKeyGroup NVARCHAR(100), @LocaleKey NVARCHAR(100)) |
FT_Products_IT_Ext |
FT_Products_ItExt(@ContextID INT) |
FT_Products_EN_Ext |
FT_Products_EnExt(@ContextID INT) |
FT_Products_FR_Ext |
FT_Products_FrExt(@ContextID INT) |
FT_Products_DE_Ext |
FT_Products_DeExt(@ContextID INT) |
Estensione delle picture
[modifica]La tabella Picture_Ext permette di estendere le immagini, ma il folder del file system è unico per tutte (core e non),
perciò non possiamo mantenere lo stesso schema di generazione dei nomi.
Quando creiamo una nuova picture per
- Prodotto custom
- Category custom
- Manufacturer custom
è necessario ricordarsi che nel campo Picture.EntityValue bisogna mettere
productext-<contextid>categoryext-<contextid>manufacturerext-<contextid>
Struttura delle url
[modifica]Ecco una ipotesi
HOMEPAGE
/it/44334- hp
LISTING DA AMBIENTE
/it/44334/catalog/ambient-16_1- ambiente obbligatorio/it/44334/catalog/ambient-16_1/type-48_1- ambiente/tipo/it/44334/catalog/ambient-16_1/brand-275_1- ambiente/manu/it/44334/catalog/ambient-16_1/type-48_1/brand-275_1- ambiente/tipo/manu
LISTING DA MANU
/it/44334/brands/it/44334/brand-275_1- manu/it/44334/brand-275_1/ambient-16_1- manu/ambiente/it/44334/brand-275_1/ambient-16_1/type-48_1- manu/ambiente/tipo (duplicata)
LISTING NEWS
/it/44334/news/it/44334/news/ambient-16_1/it/44334/news/brand-275_1/it/44334/news/ambient-16_1/brand-275_1
LISTING SEARCH
/it/44334/search
LISTING OCCASIONI
/it/44334/offers- tutte/it/44334/offers/ambient-16_1- ambiente/it/44334/offers/ambient-16_1/type-48_1- ambiente/tipo/it/44334/offers/ambient-16_1/brand-275_1- ambiente/manu/it/44334/offers/ambient-16_1/type-48_1/brand-275_1- ambiente/tipo/manu