Nop4.40.3: differenze tra le versioni
Da Webmobili Wiki.
| Riga 90: | Riga 90: | ||
=== Prodotto modifiche === | === Prodotto modifiche === | ||
* Aggiunta metodi frmt() di utilità nelle viste per restituire decimali in <code>Nop.Web\Extensions\HtmlExtensions.cs</code>: | |||
<syntaxhighlight lang="c#"> | |||
/// <summary> | |||
/// Restituisce (come stringa) il numero decimale specificato inserendo il punto | |||
/// ogni tre cifre. I numeri decimali sono limitati a 2 | |||
/// </summary> | |||
/// <param name="val">Un decimal</param> | |||
/// <returns>Il numero nella forma mmm.kkk.uuu,dd</returns> | |||
public static string frmt(this decimal val) { | |||
var ci = new CultureInfo("it-IT"); | |||
ci.NumberFormat.NumberDecimalDigits = 2; | |||
return val.ToString("N", ci); | |||
} | |||
/// <summary> | |||
/// Restituisce (come stringa) il numero intero specificato inserendo il punto | |||
/// ogni tre cifre. | |||
/// </summary> | |||
/// <param name="val">Un decimal</param> | |||
/// <returns>Il numero nella forma mmm.kkk.uuu,dd</returns> | |||
public static string frmt(this int val) { | |||
var ci = new CultureInfo("it-IT"); | |||
ci.NumberFormat.NumberDecimalDigits = 2; | |||
return val.ToString("N", ci); | |||
} | |||
</syntaxhighlight> | |||
* Nel modello del prodotto in <code>Nop.Web\Models\Catalog\ProductDetailsModel.cs</code> aggiungere: | * Nel modello del prodotto in <code>Nop.Web\Models\Catalog\ProductDetailsModel.cs</code> aggiungere: | ||
<syntaxhighlight lang="c#"> | <syntaxhighlight lang="c#"> | ||
| Riga 112: | Riga 140: | ||
#endregion | #endregion | ||
</syntaxhighlight> | </syntaxhighlight> | ||
* | * Nella vista del prodotto, nel box <code>Nop.Web\Themes\Brooklyn\Views\Product\_DeliveryInfo.cs</code> | ||
Versione delle 09:22, 3 giu 2021
Installare Nop 4.40.3
In questa guida saranno evidenziati in rosso tutti i file del core di Nop che verranno toccati.
Operazioni sul DB
- Creare un dump del database di produzione (Nop 4.3)
- Ripristinarlo
- Per ripristinare l'utente wmuser è necessario disassociarlo dal catalogo fulltext
- Da SQL Management Aprire
Storage -> Fulltext Catalogs -> nopCommerceFullTextCatalog, nella tab General impostare come Owner => dbo - Eliminare l'utente wmuser
- Ri-mappare l'utente wmuser sul database nuovo
- Aprire di nuovo
Storage -> Fulltext Catalogs -> nopCommerceFullTextCatalog, nella tab General inserire come Owner => wmuser - Aprire di nuovo
Storage -> Fulltext Catalogs -> nopCommerceFullTextCatalog, nella tab Tables/Views, pannello Eligible columns impostare italian per tutti i campi
Configurazione della Solution
- Aggiornare i file
Presentation\Nop.Web\App_Data\dataSettings.jsonePresentation\Nop.Web\App_Data\appsettings.json - Copiare i plugin di terze parti nella cartella
Plugins\Nop.Plugin.Compiled - Aggiungere il seguente codice nei build events => post build event progetto Nop.Web per copiare i plugin compilati (7spikes & co) nel corretto folder durante il build.
xcopy /y /E $(SolutionDir)Plugins\Nop.Plugin.Compiled $(SolutionDir)Presentation\Nop.Web\Plugins
- Creare dal Configuration Manager una nuova Solution Configuration chiamata ReleaseTest
- Tasto destro sul web.config e cliccare su Add Configs Transform per creare i web.Release.config e web.ReleaseTest.config
- Nel web.config aggiungere la variabile d'ambiente ASPNETCORE_ENVIRONMENT con valore Development sotto la sezione aspNetCore
<environmentVariables> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" /> </environmentVariables>
- Nel web.ReleaseTest.config mettere il valore Testing
<environmentVariables> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Testing" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" /> </environmentVariables>
- nel web.Release.config mettere il valore Production
<environmentVariables> <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" xdt:Transform="SetAttributes" xdt:Locator="Match(name)" /> </environmentVariables>
- Nel web.config aggiungere la variabile d'ambiente ASPNETCORE_ENVIRONMENT con valore Development sotto la sezione aspNetCore
- Dalle proprietà del progetto Nop.Web andare sulla tab Build, selezionare la configurazione Release e aggiungere il simbolo condizionale OFFICIAL
- Configuriamo l'applicazione in modo che cambi file di configurazione a seconda della Solution Configuration selezionata
- In
Libraries\Nop.Data\NopDataSettingsDefaults.cscambiare l'assegnamento di FilePath con quanto seguepublic static string FilePath => #if DEBUG "~/App_Data/dataSettings.development.json"; #elif !OFFICIAL "~/App_Data/dataSettings.testing.json"; #else "~/App_Data/dataSettings.json"; #endif
- In
Libraries\Nop.Services\Configuration\NopConfigurationDefaults.cscambiare l'assegnamento di AppSettingsFilePath con quanto seguepublic static string AppSettingsFilePath => #if DEBUG "App_Data/appsettings.development.json"; #elif !OFFICIAL "App_Data/appsettings.testing.json"; #else "App_Data/appsettings.json"; #endif
- In
- Addare alla Solution (cartella Libraries) i progetti GenericUtilites, WM4Search, WM_Core e USO
- Runnando la Solution dovrebbe partire con tutti i plugin disabilitati. Una volta entrati in admin è possibile vederli dall'elenco e installarli.
- Non ci saranno tutti i plugin, in tal caso cliccare su ricaricare la lista di plugin, la soluzione si chiuderà da sola, ma al successivo login la lista dovrebbe essere aggiornata.
- Aggiornare tutti i pacchetti nuGet della Solution che abbiano un update minor (dalla seconda cifra in poi)
- Creazione di IWMCoreModelFactory per le chiamate alla WMCore.
- INTERFACCIA: creare
Presentation\Nop.Web\Factories\IWMCoreModelFactory.cscosìusing GPC.WM_Core; namespace Nop.Web.Factories { public interface IWMCoreModelFactory { WMRetriever WMCore { get; } } }
- IMPLEMENTAZIONE: creare
Presentation\Nop.Web\Factories\IWMCoreModelFactory.cscosìusing GPC.WM_Core; using Microsoft.Extensions.Configuration; namespace Nop.Web.Factories { public class WMCoreModelFactory : IWMCoreModelFactory { public WMRetriever WMCore { get; } = null; public WMCoreModelFactory(IConfiguration configuration) { WMCore = new WMRetriever( configuration.GetSection("WMConnectionStrings")["Designbest"], configuration.GetSection("WMConnectionStrings")["Designbest"], configuration.GetSection("WMConnectionStrings")["Trovaprodotti"], configuration.GetSection("WMApplicationSettings")["ResourcesPath"], "Test_WM47"); } } }
- BINDING: comunicare la sua esistenza al framework modificando
Presentation\Nop.Web\Startup.csaggiungendo una riga a ConfigureServices() cosìpublic void ConfigureServices(IServiceCollection services) { // aggiunta di IWMCoreModelFactory services.AddSingleton<IWMCoreModelFactory, WMCoreModelFactory>(); services.ConfigureApplicationServices(_configuration, _webHostEnvironment); }
- INTERFACCIA: creare
- Inserimento di UsoUtilitiesController uguale a quello precedente con la differenza che le chiamate a services sono diventate tutte ASYNC e perciò il trucco è aggiungere al fondo
.Resultper le variabili o.Wait()per i metodi come ad esempioCustomer customer = _customerService.GetCustomerByGuidAsync(customerGuid).Result; _authenticationService.SignInAsync(customer, true).Wait();
Prodotto modifiche
- Aggiunta metodi frmt() di utilità nelle viste per restituire decimali in
Nop.Web\Extensions\HtmlExtensions.cs:
/// <summary>
/// Restituisce (come stringa) il numero decimale specificato inserendo il punto
/// ogni tre cifre. I numeri decimali sono limitati a 2
/// </summary>
/// <param name="val">Un decimal</param>
/// <returns>Il numero nella forma mmm.kkk.uuu,dd</returns>
public static string frmt(this decimal val) {
var ci = new CultureInfo("it-IT");
ci.NumberFormat.NumberDecimalDigits = 2;
return val.ToString("N", ci);
}
/// <summary>
/// Restituisce (come stringa) il numero intero specificato inserendo il punto
/// ogni tre cifre.
/// </summary>
/// <param name="val">Un decimal</param>
/// <returns>Il numero nella forma mmm.kkk.uuu,dd</returns>
public static string frmt(this int val) {
var ci = new CultureInfo("it-IT");
ci.NumberFormat.NumberDecimalDigits = 2;
return val.ToString("N", ci);
}
- Nel modello del prodotto in
Nop.Web\Models\Catalog\ProductDetailsModel.csaggiungere:
#region WEBMOBILI
/// <summary>
/// Nella nostra struttura c'è sempre un solo manufacturer per prodotto. Questa property lo restituisce.
/// In caso di manufacturer non settato (errore di dati) restituisce un manu vuoto per evitare una NullPointerException
/// </summary>
public ManufacturerBriefInfoModel Manufacturer {
get {
if (ProductManufacturers.Count > 0) {
return ProductManufacturers[0];
}
return new ManufacturerBriefInfoModel { Name = "", SeName = "", IsActive = false };
}
}
public string ShopCity { get; set; }
public decimal AdditionalShippingCharge { get; set; }
#endregion
- Nella vista del prodotto, nel box
Nop.Web\Themes\Brooklyn\Views\Product\_DeliveryInfo.cs