Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Tadeáš Burda
Brigádník
Avatar
Tadeáš Burda :4.2.2020 8:11

Zdravím... Snažím sa pre kámoša vytvoriť jednoduchý CMS, ale zasekol som sa na Create/ Edit articles. Konkrétne mi ide oto že neviem ako pridať a uložiť článok ktorý si mal on sám napísať keď sa prihlási ako admin.

Zkusil jsem: Internet, ale väčšinou ma to odkazuje na WP, alebo mi to ponúka už hotové riešenia, ale to nechcem. Snažím sa pochopiť ako sa to ukladá a následne rendruje. Napadlo mna vytvoriť niake rozhranie kde si na začiatku vyberie šablónu a donej potom pridáva "komponenty", <h>, <p> <img> atd... Potom by sa to niako uložilo do db, následne načítalo a cez @html rendrovalo na stránke. Alebo ma ešte napadlo nijako do uložiť do XML a cez DOM spraviť to iste. Keď som pozeral na stránky kde sú články tak väčšinou tie články idú podla niakeho vzoru, ale neviem či to je pretože tiež idú podla niakej šablóny alebo pretože to má vyzerať pekne ucelene. Samozrejme ma ešte napadlo ukladať celú .html do db, ale to je stále ten istý problém že neviem ako ju on(user) vytvori.

Chci docílit: Keby mi niekto dokázala vysvetliť ako sa to správne má robiť a poprípade mňa rovno aj niekam odkázal bolo by to good. Nechcem ale hotové riešenie, pretože to chcem pochopiť a mať to aj ako referenciu do budúcna, poprípade to rozširovať a mať to ako basic šablónu na ktorej budem potom stavať pri druhých projektoch tak by bolo good tomu rozumieť :D Popredu dik za radu

 
Odpovědět
4.2.2020 8:11
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na Tadeáš Burda
Jaroslav Smrž:4.2.2020 9:16

Úplně nechápu dotaz, co přesně ti nejde, ale zkusím ti trochu pomoci.

  1. Nepoužívej .NET Core 2.1, ale .NET Core 3.1!!!! Rozdíly jsou zásadní co se bezpečnosti a EF týče.
  2. .NET Core je MVC, takže pro práci s databází potřebuješ nejprve model - třídu (bavíme se o code first approach). Třída může vypadat třeba takto:
public class Clanek
    {
        public int ClanekID { get; set; }

        public string ClanekTitulek { get; set; }

        public string ClanekPopis { get; set; }

        public string ClanekText { get; set; }

        public string ClanekAutor { get; set; }

        public DateTime ClanekDatum { get; set; }
    }

3. Rebuild projektu, aby se třída zkompilovala a následně do složky Controllers přidáš nový controller (MVC controller with views using entity framework) s názvem ClankyController, databázovým contextem a modelem (Clanek).

4. VS ti vygeneruje controller s CRUD operacemi, takže nemusíš nic řešit u jednoduchého modelu jako je tento. Dále ti vygeneruje cshtml šablony do složky Views/Clanky (Index, Details, Edit, Create, Delete). Ty si jen upravíš podle sebe.

5. Vytvoříš migraci databáze -> otevřeš Package Manager Console a zapíšeš nejprve:

add-migration NazevMigrace

Potom další příkaz pro vytvoření tabulek v DB:

update-database

6. Spustíš aplikaci a musí ti vše fungovat.

Pokud bys chtěl přidávat výpis článků třeba na homepage, pak musíš zaregistrovat context v controlleru, určit model a jakým způsobem se články mají řadit. Třeba takto:

public class HomeController : Controller
    {
// zaregistrování DB contextu
        private readonly ApplicationDbContext _context;

        public HomeController(ApplicationDbContext context)
        {
// konstruktor
            _context = context;
        }

        // GET: Clanky - metoda musí být asynchronní a za běhu načteme články samotné
        public async Task<IActionResult> Index()
        {
// vrátí nám zobrazení (view) s výsledky z DB contextu Clanek a seřadí sestupně podle ID
// pouze tento řádek pracuje s DB a stačí k výpisu článků
            return View(await _context.Clanek.OrderByDescending(a => a.ClanekID).ToListAsync());
        }

        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }

Snad jsem ti trochu pomohl.

Nahoru Odpovědět
4.2.2020 9:16
/* Life runs on code */
Avatar
Tadeáš Burda
Brigádník
Avatar
Odpovídá na Jaroslav Smrž
Tadeáš Burda :4.2.2020 9:56

Srry, teraz keď to po sebe čítam, nenapísal sem to zrovna šťastne :D Byla to skúr prvá myšlienka mohol sem to sformulovať lepšie. Skúsim znova: Kamoš(User) po mne chce aby sa na web prihlásil a cez niake rozhranie mohol pridávať na web články a editovať ich. Článek môže obsahovať napr 2 nadpise, 5 odstavcou, niekde v strede článku obrázok, niake odkaze adt... Proste taký word dokument ale na webe, ak ma chapes. Mne ide oto že neviem ako spraviť to rozhranie a ako ten članek mam ukladateľ na webe(typel bych proste cele html ako string do db, alebo xml). Ja bych to robyl tak ze bych si to proste nakodil, ale on asi tazko preto potrebuje to rozhranie. Myslím že existuje niaky txt editor který ma na výstupe html string, alebo nieco podobné len neviem otom, resp neviem ako je toto v praxi riesene a to je to naco sa pitam. Priložím obrázok ako by ten clánek mal napr vyzerat. Neviem inak ako bych to vysvetlil srry

 
Nahoru Odpovědět
4.2.2020 9:56
Avatar
Tadeáš Burda
Brigádník
Avatar
Odpovídá na Jaroslav Smrž
Tadeáš Burda :4.2.2020 10:03

Mám hosting na forpsi.sk a ked sem sa tam snazil dostat 3.1 tak mi to neslo, preto pouzivam 2.1

 
Nahoru Odpovědět
4.2.2020 10:03
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na Tadeáš Burda
Jaroslav Smrž:4.2.2020 12:18

Pošli TIKET v administraci na forpsi.sk se žádostí o migraci na nový typ serveru, který podporuje .NET Core 3.1. Na forpsi.cz běží již 5 typů serverů, které to podporují, takže SK na tom bude nejspíš stejně.

Jinak tomu, jak jsi problém popsal teď, už rozumím. Ty bys potřeboval kompletní redakční systém, což se příliš jednoduše udělat nedá.

Je tu však jedna možnost jak alespoň částečně dosáhnout toho, co potřebuješ. řešením by bylo vytvořit model článek, který by obsahoval kolekci ICollection<> například Odstavce. Odstavec by představoval jakýsi sub-článek. Celé bych to řešil takto:

Clanek.cs

public class Clanek
    {
        public int ClanekID { get; set; }

        public string ClanekName { get; set; }

        public string ClanekPopis { get; set; }

        public ICollection<Odstavec> Odstavce { get; set; }
    }

Odstavec.cs

public class Odstavec
    {
        public int OdstavecID { get; set; }

        public int ClanekID { get; set; }
        public Clanek Clanek { get; set; }

        public string Text { get; set; }

        public int ObrazekID { get; set; }
        public Obrazek Obrazky { get; set; }
    }

Obrazek.cs

public class Obrazek
    {
        public int ObrazekID { get; set; }

        public string ObrazekCesta { get; set; }

        public string ObrazekPopis { get; set; }

        public ICollection<Odstavec> Odstavce { get; set; }
    }

K zpřístupnění ostatních modelů musíš do metody Details v ClanekController includovat ostatní modely pomocí

.Include(i => i.Obsahy)
.Include(i => i.Obrazky)
.FirstOrDefaultAsync(i => i.ClanekID == id);
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
4.2.2020 12:18
/* Life runs on code */
Avatar
Tadeáš Burda
Brigádník
Avatar
Odpovídá na Jaroslav Smrž
Tadeáš Burda :4.2.2020 13:16

Dík, ja nevedel že už prešli na 3.1 ... Čo sa týka môjho problému snažím sa nájsť free JS text editor čo by dokázal takéto základné operácie ako nadpis, tučný text, atd a vracal to v niakom vhodnom formáte stringu. Ten bych potom prehnal cez niaky môj parser, roztriedil na elementy a vyskladal na stránke. Alebo poprípade mnet seriu predpripravenych šablón ktoré bude user iba vypĺňať. Každopádne dik za radu, nečakal sem že to bude až taký problém. Nevedel by si náhodou o niakom vhodnom editor?

 
Nahoru Odpovědět
4.2.2020 13:16
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na Tadeáš Burda
Jaroslav Smrž:4.2.2020 14:46

Aha, jasný, to jsem ti zapomněl napsal. Zkus TinyMCE. Je hodně rozšířený a free.

Nahoru Odpovědět
4.2.2020 14:46
/* Life runs on code */
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na Tadeáš Burda
Jaroslav Smrž:4.2.2020 14:47

Hlavně pak pozor, až budeš vypisovat data do zobrazení, tak musíš použít

@Html.Raw()

Jinak ti to nepřevede HTML

Editováno 4.2.2020 14:48
Nahoru Odpovědět
4.2.2020 14:47
/* Life runs on code */
Avatar
Tadeáš Burda
Brigádník
Avatar
Odpovídá na Jaroslav Smrž
Tadeáš Burda :4.2.2020 15:10

Uff, to vyzerá dobre. Nemôžem to teraz bližšie skúmať, tak sa ešte spýtam, out toho je v html? Dá sa to potom uložiť ako string a následne len zobraziť cez @Html??? To by bylo presne to čo hľadám! (v)

 
Nahoru Odpovědět
4.2.2020 15:10
Avatar
Jaroslav Smrž
Tvůrce
Avatar
Odpovídá na Tadeáš Burda
Jaroslav Smrž:4.2.2020 16:01

Ano, uloží se html a html.raw to pak přeloží na stylovaný text.

Nahoru Odpovědět
4.2.2020 16:01
/* Life runs on code */
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.