Skocz do zawartości

Witamy na polskim forum Contao
Zarejestruj się teraz, aby skorzystać ze wszystkich funkcji forum. Kiedy się zalogujesz, będziesz mógł tworzyć tematy, pisać posty, rozdawać punkty reputacji, korzystać z prywatnych wiadomości i zarządzać swoim profilem. Jeśli posiadasz już konto, zaloguj się - w przeciwnym wypadku zarejestruj się już teraz!
Zdjęcie

MetaModels i dodawanie własnej klasy CSS

metamodels rozszerzenia

Najlepsza odpowiedź JarekYaro, 03 kwietnia 2020 - 21:40

Problem udało mi się rozwiązać z pomocą niemieckiego Contao Community. 

 

Rozwiązanie dla wszystkich tych którzy też się zastanawiają nad tym jak edytować tylko jeden element w Metamodels (będę odnosił się do struktury powyżej)

 

 

1. Do Osoba 1 dodaję nowy atrybut Checkbox "premium", we Frontendzie ustawiam go na samej górze pokazywanej listy (np. ponad imieniem)

2. Element "premium" można dowolnie edytować, np. zamienić pokazywaną 1 na jakąś gwiazkę i dodać poświatę

3. Ustawiamy nowy Temlate dla Renderowania (instrukcja: https://metamodels.r.../templates.html )

  • szukamy w plikach projektu metamodels_prerendered.html5 - to domyślny Template dla Metamodels 
  • metamodels_prerendered duplikujemy do swojego folderu Template, dodajemy własny suffix i dodajemy w kodzie ten header z instrukcji.
  • W Ustawieniach renderowania dla listy na stronie www ustawiamy że będziemy korzystać z metamodel_prerendered_suffix.html5

4. Edycja kodu (stworzyłem dwie wersję. 1. to dodanie klasy "field_premium" do każdego elementu który pojawia się w Osoba 1 po checkboxie premium włącznie, 2. cała Osoba 1 jako item dostaje klasę "item_premium")

Komentarze // to elementy kodu których nie zmieniałem, ale wklejam tutaj żeby się lepiej zorientować.

 

4.1.

        <?php $premiumClass = ''; ?>
<!--start foreach-->
//        <?php foreach ($arrItem['attributes'] as $field => $strName): ?>
//        <?php if ((isset($arrItem[$this->getFormat()][$field]) && ($strValue = $arrItem[$this->getFormat()][$field])
//        || (isset($arrItem['text'][$field]) && ($strValue = $arrItem['text'][$field])))): ?>
                <?php if ($field == 'premium')
                {
                    $premiumClass = 'field-premium';
                };
                ?>
                    <div class="field <?= $field . ' ' . $premiumClass?> ">
//                        <?php if (!$this->view->get('hideLabels')): ?>
//                        <div class="label"><?= sprintf($GLOBALS['TL_LANG']['MSC']['field_label'], $strName) ?></div>
//                        <?php endif; ?>
//                        <div class="value"> <?= $strValue ?></div>
//                    </div>
//
//        <?php endif; ?>
//        <?php endforeach; ?>
<!--end foreach-->

4.2.

//<?php foreach ($this->data as $arrItem): ?>
    <?php $premiumClassItem = ''; ?>
//   <?php $this->block('item'); ?>

        <?php
        if ($arrItem['text']['premium'] == 1)
        {
            echo 'ok';
            $premiumClassItem = 'item-premium';
        };
        ?>
    <div class="item <?= $arrItem['class'] . ' ' . $premiumClassItem ?>"> 

 I to tylko tyle, albo dla takiego początkującego jak ja, aż tyle. :) 

Przejdź do postu »


  • Zaloguj się, aby dodać odpowiedź
1 odpowiedź w tym temacie

#1
JarekYaro

JarekYaro

    Bywalec

  • Zarejestrowani
  • PipPip
  • 18 postów

Cześć. Czy jest tu ktoś kto korzystał z rozszerzenia MetaModels i wie czy można dodać własną klasę CSS do jednego wybranego elementu? 

 

Przykładowo mam taką strukturę zbudowaną w MM i chciałbym dodać do Osoba 1 klasę ".premium"

 

 

  1. Struktura 1
  • Osoba 1
    • Imię
    • Nazwisko
    • Wiek
  • Osoba 2
    • Imię 
    • Nazwisko
    • Wiek

 

Wiem, że można dodać własną klasę do Struktura 1 przy tworzeniu nowego Artykułu, gdy wybiera się moduł "MetaModels List" czy coś podobnego, ale chciałbym też mieć wpływ na poszczególne elementy. Ktoś ma jakiś pomysł?


  • 0

#2
JarekYaro

JarekYaro

    Bywalec

  • Zarejestrowani
  • PipPip
  • 18 postów
✓  Najlepsza odpowiedź

Problem udało mi się rozwiązać z pomocą niemieckiego Contao Community. 

 

Rozwiązanie dla wszystkich tych którzy też się zastanawiają nad tym jak edytować tylko jeden element w Metamodels (będę odnosił się do struktury powyżej)

 

 

1. Do Osoba 1 dodaję nowy atrybut Checkbox "premium", we Frontendzie ustawiam go na samej górze pokazywanej listy (np. ponad imieniem)

2. Element "premium" można dowolnie edytować, np. zamienić pokazywaną 1 na jakąś gwiazkę i dodać poświatę

3. Ustawiamy nowy Temlate dla Renderowania (instrukcja: https://metamodels.r.../templates.html )

  • szukamy w plikach projektu metamodels_prerendered.html5 - to domyślny Template dla Metamodels 
  • metamodels_prerendered duplikujemy do swojego folderu Template, dodajemy własny suffix i dodajemy w kodzie ten header z instrukcji.
  • W Ustawieniach renderowania dla listy na stronie www ustawiamy że będziemy korzystać z metamodel_prerendered_suffix.html5

4. Edycja kodu (stworzyłem dwie wersję. 1. to dodanie klasy "field_premium" do każdego elementu który pojawia się w Osoba 1 po checkboxie premium włącznie, 2. cała Osoba 1 jako item dostaje klasę "item_premium")

Komentarze // to elementy kodu których nie zmieniałem, ale wklejam tutaj żeby się lepiej zorientować.

 

4.1.

        <?php $premiumClass = ''; ?>
<!--start foreach-->
//        <?php foreach ($arrItem['attributes'] as $field => $strName): ?>
//        <?php if ((isset($arrItem[$this->getFormat()][$field]) && ($strValue = $arrItem[$this->getFormat()][$field])
//        || (isset($arrItem['text'][$field]) && ($strValue = $arrItem['text'][$field])))): ?>
                <?php if ($field == 'premium')
                {
                    $premiumClass = 'field-premium';
                };
                ?>
                    <div class="field <?= $field . ' ' . $premiumClass?> ">
//                        <?php if (!$this->view->get('hideLabels')): ?>
//                        <div class="label"><?= sprintf($GLOBALS['TL_LANG']['MSC']['field_label'], $strName) ?></div>
//                        <?php endif; ?>
//                        <div class="value"> <?= $strValue ?></div>
//                    </div>
//
//        <?php endif; ?>
//        <?php endforeach; ?>
<!--end foreach-->

4.2.

//<?php foreach ($this->data as $arrItem): ?>
    <?php $premiumClassItem = ''; ?>
//   <?php $this->block('item'); ?>

        <?php
        if ($arrItem['text']['premium'] == 1)
        {
            echo 'ok';
            $premiumClassItem = 'item-premium';
        };
        ?>
    <div class="item <?= $arrItem['class'] . ' ' . $premiumClassItem ?>"> 

 I to tylko tyle, albo dla takiego początkującego jak ja, aż tyle. :) 


  • 0





Również z jednym lub większą ilością słów kluczowych: metamodels, rozszerzenia

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych użytkowników