• Как использовать один header на всем проекте?

    artzolin
    @artzolin Куратор тега WordPress
    php, WordPress разработка сайтов artzolin.ru
    У меня в проектах классы собираются следующим образом, сделано по аналогии с функциями body_class() и post_class()

    if ( ! function_exists( 'get_wpgen_header_classes' ) ) {
    
    	/**
    	 * Get classes for header container.
    	 *
    	 * @param string $class Additional header classes.
    	 *
    	 * @return array
    	 */
    	function get_wpgen_header_classes( $class = '' ) {
    
    		// Add elements to array.
    		$classes   = array();
    		$classes[] = 'header';
    
    		if ( has_custom_header() ) {
    			$classes[] = 'header--background-image';
    		}
    
    		if ( is_front_page() || is_home() ) {
    			$classes[] = 'header-bg';
    		} else {
    			$classes[] = 'custom-class';
    		}
    
    		// Check the function has accepted any classes.
    		if ( isset( $class ) && ! empty( $class ) ) {
    			if ( is_array( $class ) ) {
    				$classes = array_merge( $classes, $class );
    			} elseif ( is_string( $class ) ) {
    				$classes = array_merge( $classes, explode( ' ', $class ) );
    			}
    		}
    
    		$classes = apply_filters( 'get_wpgen_header_classes', $classes );
    
    		// Usage:
    		/*add_filter( 'get_wpgen_header_classes', 'my_header_classes' );
    		if ( ! function_exists( 'my_header_classes' ) ) {
    			function my_header_classes( $classes ) {
    				$classes[] = 'my-class';
    				return array_unique( $classes );
    			}
    		}*/
    
    		return array_unique( (array) $classes );
    	}
    }
    
    if ( ! function_exists( 'wpgen_header_classes' ) ) {
    
    	/**
    	 * Display classes for header container.
    	 *
    	 * @param string $class Additional header classes.
    	 * @param bool   $echo  Echo or return header classes.
    	 *
    	 * @return string
    	 */
    	function wpgen_header_classes( $class = '', $echo = true ) {
    
    		$classes = get_wpgen_header_classes( $class );
    
    		if ( $echo ) {
    			echo 'class="' . esc_attr( implode( ' ', $classes ) ) . '"';
    		} else {
    			return 'class="' . esc_attr( implode( ' ', $classes ) ) . '"';
    		}
    	}
    }


    Ваше условие я дописал в функцию, осталось дописать логику для ваших оставшихся 4 разных header-ов. В шаблоне функция используется так:

    <header id="header" <?php wpgen_header_classes(); ?>>


    Так же в функцию можно передавать классы строкой или массивом

    <header id="header" <?php wpgen_header_classes( 'new-class' ); ?>>
    Ответ написан
    Комментировать
  • Как выводить значение input по клику на enter?

    Wispik
    @Wispik
    @input="$emit('update:modelValue', $event.target.value)"
    @keyup.enter="modelValue = $event.target.value"

    keyup и input это события и код в них одинаковый должен быть
    Почему в одном месте emit написан, в другом нет - это конечно загадка
    Ответ написан
    5 комментариев
  • Как повесить active class?

    @zxf
    <div :class="{ ‘pb-2’: isActive }"></div>
    data() {
      return {
        isActive: true,
      }
    }


    Где pb-2 это любой класс из tailwind.

    Классы tailwind доступны глобально, поэтому в шаблоне Vue вам надо думать о них, как о видимых классах внутри шаблона.

    В итоге все, что Вам остаётся это привязать логическую переменную к названию класса внутри шаблона.

    Запись ‘pb-2’: isActive буквально означает: «повесь мне класс pb-2, ЕСЛИ переменная isActive истинная».

    Можно делать и более интересные штуки, например:

    <div :class="{ ‘pb-${size}’: isActive }"></div>
    
    props: {
        size: {
            type: string,
            default: 4,
        },
    data() {
      return {
        isActive: true,
      }
    }
    Ответ написан
    6 комментариев
  • Почему не меняется style при click?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Потому что родительский компонент не знает об изменении значения свойства в дочернем.

    sortOpen() {
      this.$emit('sortOpen', this.sortWindowOpen = !this.sortWindowOpen);
    },

    <TableControl @sortOpen="addStatic = $event"></TableControl>
    Ответ написан
    5 комментариев
  • Почему не работает фильтр?

    Fragster
    @Fragster
    помогло? отметь решением!
    В третьей версии vue изменился байндинг v-model на компоненты:
    в v2 было:
    <custom-input
      v-bind:value="searchText"
      v-on:input="searchText = $event"
    ></custom-input>

    в v3 стало:
    <CustomInput
      :modelValue="searchText"
      @update:modelValue="newValue => searchText = newValue"
    />

    зато стало можно делать несколько v-model.
    Соответственно, нужно поменять компонент InputSearchFilter, указав в нем правильный prop и emit https://vuejs.org/guide/components/events.html#usa... (и не забыв про emits в опциях https://vuejs.org/guide/components/events.html#dec...)

    Это описано в документации по переходу https://v3-migration.vuejs.org/breaking-changes/v-... и https://v3-migration.vuejs.org/breaking-changes/em... (ну и в соответствующем разделе по ссылке выше)
    Ответ написан
    3 комментария
  • Как удалить addEventListener?

    Fragster
    @Fragster
    помогло? отметь решением!
    Почему в заголовке пишешь про удаление обработчика, но при этом говоришь, что обработчик не срабатывает (т.е. не подцепляется)?
    Вообще если бы было больше кода или пример на jsfiddle/codepen, оно было бы понятнее, но сейчас чисто визуально моему телепату кажется, что используется options api и при этом mounted и beforeDestroy находятся внутри methods а не на первом уровне (где должны быть хуки жизненного цикла компонента).

    UPD: проблема в том, что клик сначала отрабатывает на компоненте, потом на документе и в итоге ничего не происходит. Правильнее всего отключить всплытие в обработчике:
    toggle(e){
        e.stopPropagation()
       this.visibelOptions = true
          },


    но можно и (например) сделать показ позже:
    toggle(e){
        this.$nextTick().then(()=>
       this.visibelOptions = true)
          },

    toggle(e){
        setTimeout(()=>
       this.visibelOptions = true, 0)
          },


    или добавить проверку на скрытии:
    hideSelected(e){
      if (this.$el !== e.target)
              this.visibelOptions = false
          }
    Ответ написан
    5 комментариев
  • Как обратиться к элементу массива?

    Fragster
    @Fragster
    помогло? отметь решением!
    <div v-for="(item, i) in list" :key="i" @click="item.onClick">{{item.value}}</div>


    list: [
      {title: 'NAME', value: 'name'},
      {title: 'DATE', value: 'date', onClick() {alert('Ничего себе!')}},
      {title: 'TIME', value: 'TIME'},
    ],
    Ответ написан