• Вывод записей не по id, а по колонке slug?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Чтобы записи выводились по slug, их и в sql-запросе надо запрашивать по slug.
    Ваш К.О.
    Ответ написан
    9 комментариев
  • Функция Slugify и кириллица в шаблоне?

    27cm
    @27cm
    TODO: Написать статус
    Как вариант, можно использовать Transliterator::transliterate() (требуется расширение intl).

    function slugify($text)
    {
      // replace non letter or digits by -
      $text = preg_replace('~[^\\pL\d]+~u', '-', $text);
    
      // trim
      $text = trim($text, '-');
    
      // transliterate
      if (extension_loaded('intl')) {
        $translit = Transliterator::create('Any-Latin; Latin-ASCII');
        $text = $translit->transliterate($text);
      } else {
        $map = array(
            'а' => 'a',   'б' => 'b',   'в' => 'v',  'г' => 'g',  'д' => 'd',  'е' => 'e',  'ж' => 'zh', 'з' => 'z',
            'и' => 'i',   'й' => 'y',   'к' => 'k',  'л' => 'l',  'м' => 'm',  'н' => 'n',  'о' => 'o',  'п' => 'p',
            'р' => 'r',   'с' => 's',   'т' => 't',  'у' => 'u',  'ф' => 'f',  'х' => 'h',  'ц' => 'ts', 'ч' => 'ch',
            'ш' => 'sh',  'щ' => 'sht', 'ъ' => 'y',  'ы' => 'y',  'ь' => '\'', 'ю' => 'yu', 'я' => 'ya', 'А' => 'A',
            'Б' => 'B',   'В' => 'V',   'Г' => 'G',  'Д' => 'D',  'Е' => 'E',  'Ж' => 'Zh', 'З' => 'Z',  'И' => 'I',
            'Й' => 'Y',   'К' => 'K',   'Л' => 'L',  'М' => 'M',  'Н' => 'N',  'О' => 'O',  'П' => 'P',  'Р' => 'R',
            'С' => 'S',   'Т' => 'T',   'У' => 'U',  'Ф' => 'F',  'Х' => 'H',  'Ц' => 'Ts', 'Ч' => 'Ch', 'Ш' => 'Sh',
            'Щ' => 'Sht', 'Ъ' => 'Y',   'Ь' => '\'', 'Ю' => 'Yu', 'Я' => 'Ya'
        );
        $text = strtr($text, $map);
      }
      
      // lowercase
      $text = strtolower($text);
    
      // remove unwanted characters
      $text = preg_replace('~[^-\w]+~', '', $text);
    
      if (empty($text)) {
        $text = 'n-a';
      }
    
      return $text;
    }
    Ответ написан
    1 комментарий
  • Как достать из массива определенные ячейки, к примеру по ID?

    @romaro
    Может так?
    select price form prices where id in (1, 2, 3 ...)

    Или подзапросом:
    select price form prices where id in (select id ...)
    Ответ написан
    Комментировать
  • Как упростить функцию вывода данных из mysql?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Два вложенных цикла решают эту проблему:

    <?php
    
    function get_categoies($pdo)
    {
        $stmt = $pdo->prepare("SELECT * FROM `categories`");
        $stmt->execute();
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
    
    function get_prices_by_category($pdo, $category_id)
    {
        $stmt = $pdo->prepare("SELECT * FROM `prices` WHERE category_id = ?");
        $stmt->execute([$category_id]);
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
    
    $categories = get_categoies($pdo);
    
    foreach ($categories as $category) {
    	echo '<h3>'.$category['title'].'</h3>
      			<div class="cblock">';
    	$prices = get_prices_by_category($pdo, $category['id']);
    	foreach ($prices as $price) {
    		echo '<div class="pricelist-row">
    				<div class="service">' . $price["title"] . '</div>
    				<div class="price">от ' . $price["price"] . ' руб/' . $price["type"] . '</div>
    	  		</div>';
    	}
    	echo '</div>';
    }


    Ещё лучше использовать шаблонизатор для вывода HTML, но это уже другая история
    Ответ написан
    9 комментариев
  • Как отредактировать данные в php файлах?

    @rPman
    Первый и главный вопрос, на который нужно ответить при хранении данных - существует ли 'многопользовательский' (а точнее множественный одновременный) доступ к этим данным, только ли он на чтение или возможна одновременная запись? есть ли особенности по блокировке записи (например пользователь открыл форму, прочитав данные, и пока он не нажал сохранить или отменить - доступ к данным другим пользователям закрыт) и т.п.

    Второй - как много данных

    Третий - на сколько сложные запросы по поиску и фильтрации у тебя есть

    И если многопользовательского доступа нет и данных не много (максимум мегабайты) и работа с данными простая, то можно совсем не заморачиваться с базами данных и хранить все в файлах. Для этого в php есть несколько инструментов сериализации любых данных в строки (массивы, объекты. строки и т.п.):

    serialize, json_encode, php_export (этот формирует строку в формате php, т.е. загрузить такой файл можно просто импортировав его в код), относительно недавно появился igbinary_serialize (расширение идет в поставке с php) - отличный бинарный формат, достаточно эффективный и наверное самый быстрый из существующих.

    Так же сериализовать в файл можно не сразу все данные а по объекту на файл (файловая система ОС - отличная key-value база данных, удобная быстрая, но без нормальной поддержки многопользовательского доступа, точнее можно с помощью блокировок но сложно), благодаря чему можно решать очень сложные задачи без оверхеда на место на диске, процессор и лишний кодинг. Недостаток этого подхода - индексы реализовывать придется самому.

    p.s. по теме конкретно сформулированного вопроса, гугли CRUD, это готовые инструменты по create,read, update, delete объектов, которые тут же описываешь. Так или иначе эти механизмы мого кто реализует в своих фреймворках

    но начинающему настоятельно рекомендую пройти весь путь от самописных структур данных и работе с sql
    Ответ написан
    4 комментария
  • Как отредактировать данные в php файлах?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Это бесполезное занятие и лучше сделать хранение этих данных в каком угодно хранилище. Если на сайте уже доступна mysql, то хранить в ней.

    Чтобы при помощи php можно через форму можно редактировать данные, они не должны лежать в РНР файлах.
    Ответ написан
    4 комментария
  • Битрикс цены для разных групп пользователей?

    Нужно проверить принадлежит ли пользователь группе

    // для любого пользователя
    echo in_array($group_id, CUser::GetUserGroup($user_id));
    
    // для текущего пользователя
    echo in_array($group_id, $USER->GetUserGroupArray());
    
    //Принадлежит ли пользователь, который состоит во многих группах заданным:
    <?$arGroupAvalaible = array(1,9,12,13,14,15); // массив групп, которые в которых нужно проверить доступность пользователя
    $arGroups = CUser::GetUserGroup($USER->GetID()); // массив групп, в которых состоит пользователь
    $result_intersect = array_intersect($arGroupAvalaible, $arGroups);// далее проверяем, если пользователь вошёл хотя бы в одну из групп, то позволяем ему что-либо делать
    if(!empty($result_intersect)):     print "мне разрешено находится на данной странице или просматривать данную часть страницы";endif;?>
    Ответ написан
    1 комментарий
  • Как в битриксе вывести блок меню на главной странице?

    там компонент меню типа стандартного horizontal-multilevel-menu, только поправлены вывод. все просто
    Ответ написан
    Комментировать
  • Как в битриксе вывести блок меню на главной странице?

    @Firsov36
    full-stack web developer
    Скорее всего используется компонент 'catalog.section.list' с доработкой шаблона. Или можно написать свой компонент более простой в плане использования ресурсов и логики, тут же просто иконки у главных разделов, названия и ссылки.
    Ответ написан
    Комментировать
  • Добавить при нажатии class на секунду и удалить?

    @lega
    Тоже что и у MaxKorz только без* js и адекватно работает при нескольких кликах: codepen.io/anon/pen/xgGWMZ
    Ответ написан
    2 комментария
  • Добавить при нажатии class на секунду и удалить?

    Grigory90
    @Grigory90
    $(function() {
        $('#launch').on('click', function() {
            var $this = $(this);
            $this.addClass('go');
            setTimeout(function() {
                 $this.removeClass('go');
            }, 1000);
        })
    });
    Ответ написан
    Комментировать