• Как подставить дату в формулу?

    oshliaer
    @oshliaer Куратор тега Google Sheets
    Google Products Expert
    Лучшим способом будет использовать формулу TEXT

    =IMPORTXML(
      "http://www.cbr.ru/scripts/XML_daily.asp?date_req=" & TEXT(A2;"DD/MM/YYYY");
      "//ValCurs/Valute[CharCode=""USD""]/Value"
    )


    5ece79bc8485c333632420.png
    Ответ написан
    3 комментария
  • Wordpress и собственная логика, возможно ли?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    Вы неправильно понимаете суть плагинов в WordPress. Воспринимаете это как что-то плохое, или сложное, или тяжелое, или как-то еще. Все на самом деле просто:

    1. WordPress в процессе выполнения подключает кучу файлов - и своих, из ядра, и пользовательских.

    2. Любой пользовательский код, где бы он ни находился - в mu-плагине, в обычном плагине, в шаблонах темы, в functions.php или в файле, который подгружается с помощью autoload вообще из другой папки при использовании Composer - абсолютно любой пользовательский файл подключается и выполняется идентично и одинаково. Для PHP и для WordPress это просто код, который надо выполнить.

    3. Разница между тем, куда помещать свой пользовательский код только в удобстве и очередности подключения и исполнения этого кода, а также обновления и прочие плюшки. Исходя из этого:

    - mu-плагин обычно 1 php-файл, его нельзя отключить в админке, выполняется из пользовательского кода условно первым. Не использует систему обновлений плагинов, поэтому изменения надо заливать вручную. Выполняется до pluggable функций WP, то есть может их переопределять. Используется для разных задач, когда конкретный пользовательский код нужно выполнить ДО обычных плагинов, когда он критичен для работы проекта и его нельзя отключать и тд. При смене темы сайта функциональность из mu-плагина остается.

    - обычный плагин - может быть как простым (1 файл), так и любой сложности. Выполняется после mu-плагинов, перед pluggable. Используется для всего остального. Можно выключить из админки, обновить (с WP.org, сайта разработчика и даже со своего репозитория), при смене темы сайта остается.

    - functions.php активной темы. Загружается после обеих типов плагинов, сразу перед срабатыванием хука init. При смене темы, разумеется, любая функциональность которая определена в этой файле будет утеряна. Обновляется вместе с темой. Еще стоит помнить про то, что их может быть 2 - родительской темы и дочерней.

    Еще важно - в теме принято держать только то, что касается вывода и отображения информации на фронте сайта. Тема - это про внешний вид, дизайн и оформление. Функциональность должна быть в плагинах.

    Для WordPress в целом абсолютно все равно, где будет ваш код. И да, ваша функция / класс будет идентично работать (и по производительности в том числе), не важно где она будет - в functions.php или в плагине. Это будет все та же функция или класс, только в случае с плагином в голове документа будет блок с комментарием, который и определяет, что это плагин. Все. Больше никакой разницы.
    Ответ написан
    Комментировать
  • Как создать поле в models Django которое является результатом арифметической операции других полей?

    Используй методы модели - туда можно пробросить данные из других моделей.
    Ответ написан
    Комментировать
  • Как правильно сделать модель юзеров с ролями? Есть ли примеры/практики авторизации с ролями?

    planc
    @planc
    const ADMIN = 0b11111111
    
    const CAN_DELETE = 0b00001000
    const CAN_EDIT =   0b00000100
    const CAN_WRITE =  0b00000010
    const CAN_READ =   0b00000001
    
    const REGULAR_USER = CAN_WRITE | CAN_READ
    const ANONYMOUS = CAN_READ
    const BANNED = 0b0
    
    const MODERATOR = REGULAR_USER | CAN_EDIT | CAN_DELETE
    
    class User {
      constructor(name, mask) {
        this.name = name;
        this.mask = mask;
      }
    }
    
    
    const users = [
      new User('admin', ADMIN),
      new User('moder', MODERATOR),
      new User('regular_user', REGULAR_USER),
      new User('anon', ANONYMOUS),
    ]
    
    
    users.forEach( u => {
      console.log(u.name);
      if ((u.mask & ADMIN) === ADMIN) {
        console.log('\t ADMIN');
      }
      if ((u.mask & MODERATOR) === MODERATOR) {
        console.log('\t MODERATOR');
      }
      if ((u.mask & REGULAR_USER) === REGULAR_USER) {
        console.log('\t REGULAR_USER');
      }
      if ((u.mask & CAN_EDIT) === CAN_EDIT) {
        console.log('\t CAN_EDIT');
      }
      if ((u.mask & CAN_DELETE) === CAN_DELETE) {
        console.log('\t CAN_DELETE');
      }
      if ((u.mask & CAN_WRITE) === CAN_WRITE) {
        console.log('\t CAN_WRITE');
      }
      if ((u.mask & CAN_READ) === CAN_READ) {
        console.log('\t CAN_READ');
      }
    });


    admin
    	 ADMIN
    	 MODERATOR
    	 REGULAR_USER
    	 CAN_EDIT
    	 CAN_DELETE
    	 CAN_WRITE
    	 CAN_READ
    moder
    	 MODERATOR
    	 REGULAR_USER
    	 CAN_EDIT
    	 CAN_DELETE
    	 CAN_WRITE
    	 CAN_READ
    regular_user
    	 REGULAR_USER
    	 CAN_WRITE
    	 CAN_READ
    anon
    	 CAN_READ
    Ответ написан
    Комментировать
  • Удобный REPL для Python?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Нет ничего лучше IPython.
    Ответ написан
    Комментировать