• PHP: автозагрузка классов. Объясните на пальцах на простом примере?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Все свои классы располагаете в папке app/ (к примеру)
    Всем классам задаете namespace Fogersp\SuperProject
    В composer.json пишете в секции autoload

    ...
    "autoload": {
      "psr-4": {
        "Fogersp\\SuperProject\\": "app"
      }
    },
    ...


    Это значит, что классы с нэймспейсом Fogersp\SuperProject автозагрузчик будет искать в папке app/
    Например, класс Fogersp\SuperProject\DB\Entry должен располагаться в файле app/DB/Entry.php

    Далее в корне проекта выполняете команду
    composer dumpautoload
    и композер создаст вам автозагрузчик.

    Теперь в точке входа подключаете этот загрузчик и не паритесь о подключении файлов
    include '../vendor/autoload.php';

    Вот и всё =)
    Ответ написан
    10 комментариев
  • Что надо выставить в портфолио чтобы работодатель дал работу фриланс js разработчику?

    Zoominger
    @Zoominger
    System Integrator
    JavaScript изучил, PHP знаю, HTML, CSS3, ещё много всего.

    Судя по всему, вы только-только закончили смотреть какие-нибудь видеокурсики и являетесь типичным вайтишником. Так вот, шанс найти хоть какую-то работу на фрилансе в таком случае равен нулю.
    Ответ написан
    3 комментария
  • Как правильно спроектировать базу данных для сайта?

    syschel
    @syschel
    freelance/python/django/backend
    Мне кажется вы немного перемудрили, излишне усложнив.
    Смотря на ваше "меню", как вижу таблицы в БД я:
    + pages = id, url(ЧПУ, если выводить в адресной строке хотим не ИД), title(заголовок), text(тело страницы, то есть текст)
    + news = id, url, date, title, short_text(этот текст выводим в списке новостей, он короткий), text(это уже на странице новости), image(картинка новости)
    + photo_category(если нужны альбомы для набора фотографий) = id, title, text(описание альбома), image(превьюшка альбома)
    + photos = id, name(если нужно название или описание), image(путь до файла), category(ссылка на photo_category, если нужны альбомы, иначе поле не создаём)
    + videos = id, video(ссылка на видео файл)
    + document_category = id, name
    + documents = id, category(ссылка на document_category ), ISBN(какой-то идентификатор документа вне бд), created(дата_тайм создания), update(дата_тайм обновления/изменения)

    Если изменений у документов несколько, в разные периоды, то я бы выносил поле update в отдельную таблицу
    + document_modifed = id, document(ссылка на документ), date, comment(комментарий иб изменениях, если он нужен)

    Ещё можно было бы добавить пользователей, пускай не на уровне пользователей сайта, а просто как список, то добавил бы. Чтобы указывать автора документа, автора изменений документа(если это нужно отслеживать).

    Поля category в таблице photos и document_category , у меня подразумевают, что категория у них может быть выбрана одна из, а не множество из. Если нужно именно множественный, то да, создавать отдельную таблицу и указывать там связи
    Я сделал специально независимые таблицы "категорий", так как скорее всего они и будут независимыми, не пересекающимися. Тогда при создании под объекта, можно выбирать из списка категории только его типа, а не копаться во всех категориях скопом. То есть, создавая запись об документе, не надо выбирать среди "фоточки с корпаратива 2018", "протяжные валы", "зарплаты", "отмечаем юбилей", "отчёты".
    Ответ написан
    Комментировать
  • Как добавить реализовать дерево из checkbox на VueJS?

    @anjilnew
    frontend
    Есть два пути:
    1) vuex.
    Берем vuex, в нем создаем дерево, где например объекты это еще один уровень дерева, а где массив это конечный элемент с чекбоксам. Создаем компонент который пропсом полуает дочернее дерево и путь к нему, он проверяет пришедший элемент если это массив рисуем элементы чекбоксы, если объект то рисуем компоненты из всех ветвей дерева, в который передаем уже из отдельные ветви. Также нужно не забыть передавать попутно условный путь по которому можно дойти до текущей ветки, это понадобится когда в vuex будете обращаться к значению привязаному к конкретному чекбоксу, и вот самое интересное что нам поможет lodash и его методы _.get(), _.set() с помощью них мы во время мутации состояния попадать по пути к нужному значению.

    2) второй вариант то же самое только вместо вуекса бесконечные эмиты к родительскому компоненту хранящему значение
    Ответ написан
    Комментировать
  • Как из выделенных ячеек создать массив на VB?

    или так
    выделите диапазон и запустите макрос, можете на кнопку назначить
    он спросит куда поместить результат
    Sub test()
       Dim rng As Range
       Dim v, vr, vc As Variant
       Dim i&, j As Long
       Dim sRes As String
       
       Set rng = Selection
       
       v = rng
       
       ReDim vc(LBound(v) To UBound(v))
       For i = LBound(v) To UBound(v)
          ReDim vr(LBound(v, 2) To UBound(v, 2))
          For j = LBound(v, 2) To UBound(v, 2)
             vr(j) = v(i, j)
          Next j
          vc(i) = Join(vr, ",")
       Next i
       
       sRes = Join(vc, ";")
       
       Set rng = Application.InputBox("Выберите ячейку", "Object", Type:=8)
    
       rng = sRes
       
    End Sub
    Ответ написан
    1 комментарий
  • Как из выделенных ячеек создать массив на VB?

    Вот наполнение, примерное
    Dim arr()
    
        ReDim arr(100, 1) '100 - верхняя граница массива (равно кол. строк - 1)
        
        Dim i&
        For i = 0 To 99
            arr(i, 0) = Cells(i + 1, 1).value 'i+1 потому что нумерация строк идет с 1, 1 - номер столбца с координатой Х
            arr(i, 1) = Cells(i + 1, 2).value '2 - номер столбца с координатой Y
        Next
    Ответ написан
    1 комментарий
  • Bitrix API. Как вывести один элемент инфоблока?

    На самом деле не понятно что вы спрашиваете.
    Если вам надо вывести один, первый элемент выборки, то тогда прислушайтесь к совету serginhold - установите лимит в 1 элемент.
    А на худой конец вы ведь всегда можете в своем коде, который привели, заменить
    while($ar_fields = $test_elements->GetNext())
    на
    if($ar_fields = $test_elements->GetNext())
    И получить тот же самый эффект - отображение первого элемента выборки.

    НО!
    Вы пишите что-то про url и вряд ли вам нужно выводить один и тот же элемент (первый попавшийся) на многих разных страницах.
    Следовательно у вас проблема вовсе не с тем что нужно показать один элемент вместо нескольких, как вы думаете и спрашиваете, а в том, как выбрать НУЖНЫ для этой странице элемент.
    Если у вас страница однозначно ассоциирована с элементом не важно каким способом, то ваш фильтр должен выбрать один элемент и даже с while вы должны получить нужный вам результат.
    Отсюда вопрос - в какой переменной запроса и какой идентификатор элемента вы передаете на странице?
    Ответ написан
    2 комментария
  • First argument in form cannot contain nil or be empty. Rails

    В методе log_in вы рендерите шаблон auth, в котором используется переменная @user. Но вы не определиле ее в методе. Поэтому и ошибка.

    Сделайте так:
    @user = User.find_by login: params[:user][:login]
    вместо:
    user = User.find_by login: params[:user][:login]
    Ответ написан
    Комментировать