Kendi temamdaki yönetici temasını nasıl geçersiz kılabilirim?


9

Kendi Drupal 8 temamı oluşturdum:

mytheme.info.yml:

name: My Theme
description: 'Drupal 8 Theme'
type: theme
base theme: bartik
core: '8.x'

mytheme.libraries.yml

global-styling:
  version: 1.x
  css:
    theme:
      css/layout.css: {}
      css/style.css: {}
      css/colors.css: {}
      css/print.css: { media: print }

Yönetici teması olarak "Yedi" kullanıyorum.

Bir sayfayı düzenlediğimde (/ node / x / edit) Yedi tema kullanılır.

Şimdi düzenleme formuna biraz CSS eklemeliyim. Bunu nasıl yapabilirim? style.css yalnızca ön uç sayfalara yüklenir. Sayfaları düzenle yedi tema kullanır ve temam CSS yoksayılır.

Drupal 8'de yönetici sayfalarına nasıl bazı CSS ekleyebilir veya formları düzenleyebilirim?

Yanıtlar:


17

Bir modül kancasından yönetici CSS ekleyebilirsiniz. XXX öğesini modül adıyla değiştirin.

1 CSS'nizi css / extra.admin.css dosyasına koyun

2 XXX.libraries.yml oluşturarak bir kitaplık bildirin

extra.admin:
  css:
    theme:
      css/extra.admin.css: {}

3 Kütüphaneyi yüklemek için bir kanca oluşturun.

/**
 * Implements hook_page_attachments().
 */
function XXX_page_attachments(array &$attachments) {
  $theme = \Drupal::theme()->getActiveTheme()->getName();
  if ($theme == 'seven') {
    $attachments['#attached']['library'][] = 'XXX/extra.admin';
  }
}

15

Bir temayı başka bir temanın içinden kontrol edemezsiniz. Ve bazı akıllı geliştiriciler bunu yapmak için hackish bir yol bulabilirse bile: lütfen yapma. Güven bana, sen istemiyorsun. Endişelerin ayrılması kavramı programlamada önemlidir. Temel olarak, sisteminizin farklı hareketli parçalarının (yani temanız), diğer parçaların (yani yönetici temanız) görevlerine müdahale etmeden kendi görevlerini yerine getirmesi gerektiği anlamına gelir.

Hedefinize ulaşmak için en temiz yol yeni bir tema oluşturmak, onu Yedi'nin alt teması yapmak (böylece Yedi hakkında sevdiğiniz her şeyi miras alır) ve özel CSS'nizi karışıma eklemek. Şimdi bu temayı Yedi yerine yönetici temanız olarak seçebilirsiniz.


Maalesef, bunu çözmenin bir yolu olmadığına inanamıyorum. Sadece img {max-width: 100%; gibi bazı CSS eklemek zorundayım; yükseklik: otomatik}. Bir yolu olmalı.
drupalfan

4
Hayır, olmamalı. Temaların karıştırılması amaçlanmamıştır. Yalnızca bir etkin tema olabilir. Bunu yapmanız gerekiyorsa, bir form değişikliği ve başka bir kitaplık ekleyebilecek bir modül yapın.
Berdir

3
@drupalfan, bunu çözmenin bir yolu olmadığına niye karar verdiğinizi anlamıyorum. Orada olan yolları (ı tarif Yedi subtheme yöntemi ve Berdir yöntemi) ve onlar yapmak zor değildir. Önerdiğiniz çözüm, bir kuaförden ayakkabılarınızın rengini değiştirmesini istemek gibidir. Yapma.
marcvangend

2
I do not want to mix themes, I only want to add one simple CSS!Drupal'da karıştırma olarak kabul edilir. Sahip olduğunuz tek seçenek Yedi'nin alt temasını yapmak veya içinde bulunan yedi temayı "kesmek", /core/themes/ancak drupal 8'i her yükselttiğinizde değişiklikleri kaybedeceksiniz. Bu nedenle, her seferinde geçersiz kılınan .css dosyasını yüklemeyi hatırlamanız gerekir D8'i yükseltirsiniz. Bu nedenle, Yedi'nin alt temasını yapmaktan daha iyi olursunuz ve bunu yönetici teması olarak kullanabilirsiniz, çünkü alt tema /themesiçeride değil klasörde bulunur /core/themes.
Hayır Sssweat

1
@Joum Açıkladığınız şey tamamen farklı. OP bir temanın başka bir temayı etkilemesine izin vermek istiyordu. Bu, özellikle iki tema aynı sayfada asla aktif olamayacağı için, sorumlulukları karıştırmaktır. Bazı CSS'leri bir modülle göndermek tamamen normal IMO'dur - sadece hafif, geçersiz kılınabilir ve modülünüzün yaptığı her şeye kesinlikle odaklanabilirsiniz.
marcvangend


4

Yedi için bir alt tema oluşturursanız ve bunu yönetici temanız olarak kullanırsanız, çekirdek temayı bozmadan veya tema sorumluluklarını karıştırmadan seven_subtheme.info.yml dosyasına kendi css geçersiz kılmalarınızı ekleyebilirsiniz. Alt temanın yalnızca info.yml dosyasına ve css'ye sahip olması gerekir ve diğer her şeyi devralır.

Bununla birlikte, seslerden, esas olarak wysiwyg editörü (ckeditor) tarafından kullanılan css'i değiştirmekle ilgileniyorsunuz, bunun yerine ckeditor_stylesheetsinfo.yml dosyanıza eklemek isteyebilirsiniz . Açıklandığı gibi, bu Not bu konuda , ckeditor css gerçekten eklenebilir sizin varsayılan olarak yönetici olmayan tema css kullanmalıdır wysiwyg editörü olarak, tema (bu ekledikten sonra net önbelleklerini unutmayın).


Doğru cevap. Bunu yapmanın yolu bu.
Kevin

3

CSS Enjektör modülünü takın (şu anda Drupal 8 için sadece bir çalışma geliştirme sürümü var).

Ardından CSS Injector ( / admin / config / development / css-injector ) yönetim sayfasına gidin . Yeni bir CSS kuralı oluşturun. Örneğin, bir alanın arka plan rengini değiştirmek için:

.node-form .field--name-title input {
    background-color: red;
}

Bu kuralı Yedi temaya (veya kullanımdaki herhangi bir yönetici temasına) uygulamayı seçin.

Tasarruf edin ve tadını çıkarın!


>> Drupal 8'de yönetici sayfalarına nasıl bazı CSS ekleyebilir veya formları düzenleyebilirim?
drupalfan

Cevabımı güncelledim, hatam için üzgünüm (başka bir konuyu cevapladım!)
Whatwatt

1

Herhangi bir yönetici temasıyla çalışmak için AdamS yanıtını kullandım ve kancayı değiştirdim.

$config = \Drupal::config('system.theme');

$theme = \Drupal::theme()->getActiveTheme()->getName();

if ($theme == $config->get('admin')) {

  $attachments['#attached']['library'][] = 'XXXX/extra.admin';

}

1

Neden css'i çağıran ve yönetici sayfalarınızın başlığına bir blok oluşturmuyorsunuz?

@import url ("/ temalar / XYZ / css / admin_overrides.css")


1

Bir modül kancasından yönetici CSS ekleyebilirsiniz. XXX öğesini modül adıyla değiştirin.

1 CSS'nizi css / extra.admin.css dosyasına koyun

2 XXX.libraries.yml oluşturarak bir kitaplık bildirin

extra.admin:
  css:
  theme:
  css/extra.admin.css: {}

3 Kütüphaneyi yüklemek için bir kanca oluşturun.

/ **
* hook_page_attachments () yöntemini uygular.
* /

function XXX_page_attachments(array &$attachments) {
  $config = \Drupal::config('system.theme');
  $theme = \Drupal::theme()->getActiveTheme()->getName();
    if ($theme == $config->get('admin')) {
       $attachments['#attached']['library'][] = 'XXXX/extra.admin';
    }
 }

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.