CSV files are often used so website-owners can upload data from another system. This example shows us getting the CSV-file through a query and visualizing it here.
@inherits Custom.Hybrid.RazorTyped
@using ToSic.Razor.Blade;
@using System.Linq;
@{
// get the query
var query = Kit.Data.GetQuery("ProductsFromCSV");
// get the data from the query
var products = AsItems(query);
// get the current product or the default - the query always selects one
var current = AsItem(query["Current"]);
// Get the current url params so we can derive from it for details links
var urlParams = MyContext.Page.Parameters;
}
<ul>
@foreach (var product in products) {
<!-- this li will have class=selected if it's the current one -->
<li class='@(product == current ? "selected" : "")'>
<!-- this creates a link to the current page and product=id -->
<a href='@Link.To(parameters: urlParams.Set("product", product.Id.ToString()))'>
@product.Get("Name") (#@product.Get("Id"))
</a>
@if (current == product) {
<br>
<em>
@current.Get("Description")
(<a href="@product.("Link")" target="_blank">find out more</a>)
</em>
}
</li>
}
</ul>
Source Code of products.csv.txt
Id;Name;Description;License;Created;Link
1;2sxc;A neat CMS extension for DNN;MIT;01.01.2012;https://2sxc.org/
2;Koi;System to coordinate the CSS-Framework between theme and modules. ;MIT;01.06.2018;https://connect-koi.net/
3;Razor Blade;Helpers for common Razor task;MIT;01.02.2019;https://github.com/DNN-Connect/razor-blade
4;Image Resizer;Automatic, amazing image Resizer;MIT;06.05.2013;https://2sxc.org/learn-extensions/ImageResizer
View Configuration
This is how this view would be configured for this sample.
Query: ProductsFromCSVOqtane
No details yet for ProductsFromCSVOqtane
This is similar to the previous example, except that the CSV file can be uploaded again and again in the App-Settings UI. So the path isn't hard-coded.
@inherits Custom.Hybrid.RazorTyped
@using ToSic.Razor.Blade;
@using System.Linq;
@{
// get the query
var query = Kit.Data.GetQuery("ProductsFromCsvInAppSettings");
// get the data from the query
var products = AsItems(query);
// get the current author (if available) from the stream Current
var current = AsItem(query["Current"]);
// Get the current url params so we can derive from it for details links
var urlParams = MyContext.Page.Parameters;
}
<ul>
@foreach (var product in products) {
<!-- this li will have class=selected if it's the current one -->
<li class='@(product == current ? "selected" : "")'>
<!-- this creates a link to the current page and product=id -->
<a href='@Link.To(parameters: urlParams.Set("product", product.Id.ToString()))'>
@product.Get("Name") (#@product.Get("Id"))
</a>
@if (current == product) {
<br>
<em>
@current.Get("Description")
(<a href="@product.Url("Link")" target="_blank">find out more</a>)
</em>
}
</li>
}
</ul>
Source Code of products.csv.txt
Id;Name;Description;License;Created;Link
1;2sxc;A neat CMS extension for DNN;MIT;01.01.2012;https://2sxc.org/
2;Koi;System to coordinate the CSS-Framework between theme and modules. ;MIT;01.06.2018;https://connect-koi.net/
3;Razor Blade;Helpers for common Razor task;MIT;01.02.2019;https://github.com/DNN-Connect/razor-blade
4;Image Resizer;Automatic, amazing image Resizer;MIT;06.05.2013;https://2sxc.org/learn-extensions/ImageResizer
View Configuration
This is how this view would be configured for this sample.