Блог SOPDU


RSS

Январь 26, 2016

Вывод разделов Интернет-Магазина


Встала задача реализовать вывод разделов интернет-магазина в шаблоне сайта (в верстке). Что не является типовым решением.
Реализовано это так:

Дальше...

Запись в: HostCMS - Без комментариев - Тэги: HostCMS, content, shop, sections, магазин, интернет-магазин



Январь 18, 2016

Немного хадкода


Возникла проблема с кастомом элемента, у которого должна была быть необычная верстка.
В частности, вывести название элемента и все дополнительные свойства.
Способ вывода через XSL совсем не подходил для реализации. Достойного решения с помощью HostCMS - API тоже не нашлось.
После недолгих раздумий и изучения строения sql-базы у HostCMS, было принято решение напрямую выдернуть из БД и собрать это в массив, который потом можно закастомить как угодно.

Дальше...

Запись в: HostCMS - Комментариев: 1 - Тэги: HostCMS, content, условие, PHP, логика, api, MySQL, БД, База данных, запросы



Январь 08, 2016

ПОЛЬЗОВАТЕЛЬСКИЕ СЕО-ДАННЫЕ


Встала задача, что бы на странице раздела инфоблока которая формируется с API выводились пользовательские мета-данные, которые он вбивает в вкладке «SEO».

<?
$rsSection = CIBlockSection::GetList(
    array(),
    array(
      "IBLOCK_ID"=>12, // Инфоблок id12
      "ACTIVE"=>"Y", // активные разделы
      "ID"=>$_REQUEST["ID"] // id раздела приходит post-запросом
    ), 
    false
); 
if($arSection = $rsSection->GetNext()){
    $ipropValues = new BitrixIblockInheritedPropertySectionValues(
        $arSection["IBLOCK_ID"],
        $arSection["ID"]
    );
$arSection["IPROPERTY_VALUES"] = $ipropValues->getValues();
}
$title_seo = $arSection["IPROPERTY_VALUES"]["SECTION_META_TITLE"];
$description = $arSection["IPROPERTY_VALUES"]["SECTION_META_DESCRIPTION"];
$keywords = $arSection["IPROPERTY_VALUES"]["SECTION_META_KEYWORDS"];
 
$APPLICATION->SetPageProperty("keywords", $keywords);
$APPLICATION->SetPageProperty("description", $description);
$APPLICATION->SetTitle($title_seo);
?>

Запись в: 1с-Битрикс - Без комментариев - Тэги: 1C-Bitrix, 1С-Битрикс, API, content, description, keywords, meta, PHP, SEO, title, константа



Январь 04, 2016

XSL IF ELSE и вывод дополнительного свойства по «галочки»


В XSL нет такого понятия как if else , как в PHP.
Но все же нечто подобное есть.
Конструкция следующая:
<xsl:choose>
   <xsl:when test="УСЛОВИЕ"> //это if
      Действие удовлетворяющее условия
   </xsl:when>
   <xsl:otherwise> // это else
      Действие не удовлетворяющее условию
   </xsl:otherwise>
</xsl:choose>

Допустим у нас дополнительное свойств «галочка».
Нам нужно, что бы по активной галочки выполнялось какое-то действие, а без галочки выполнялось другое действие в XSL.

Дальше...

Запись в: HostCMS - Комментариев: 2 - Тэги: HostCMS, content, условие, XSL, логика



Декабрь 23, 2015

Вставка редактируемых областей


Разрабатывая интернет ресурсы, очень важно учесть то, что в большинстве случаев конечный пользователь не обладает специальными знаниями (например, html) и встает вопрос, как сделать так, чтобы ему было удобно работать с ресурсом?
Допустим, надо сменить телефон или время работы в шапке сайта. Конечный пользователь с этим не справляется, так как не знает, как это сделать, где и т.д.
Казалось бы, что выход очевиден: или завести персонального администратора, или писать (звонить) в техническую поддержку. Но, есть более изящный выход из этой проблемы:

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

В HostCMS это можно реализовать так:
Создайте документ, впишите в него, скажем, телефон. Допустим, у документа id будет 3.
Теперь мы в любое место верстки (шаблона) можем вставить код вызова этого документа:

<?php Core_Entity::factory('Document', 3)->Document_Versions->getCurrent()->execute();?>

В итоге, конечный пользователь сможет кликнуть на телефоне, и без проблем его изменить, не копаясь в файлах того же шаблона и не ломая верстку :)

Запись в: HostCMS - Без комментариев - Тэги: content, HostCMS, user



Декабрь 18, 2015

Меню аккордион


В самое начало добавлен скрипт, который отвечает за скрытие/открытие. Также добавлен блок для вывода подузлов:

<xsl:if test="structure">
<ul class="left_menu gray_link gray" id="{@id}" style="display: {$style_type}">
<xsl:apply-templates select="structure"/>
</ul>
</xsl:if>

Запись в: HostCMS - Без комментариев - Тэги: HostCMS, menu



Декабрь 14, 2015

Вывод дополнительных свойств в категории


Задача:

Вывод дополнительных свойств в категории товара.

Реализация:

<xsl:value-of select=".//shop_group[@id=$group]/property_value[tag_name='text-bottom']/value"/>

Запись в: HostCMS - Без комментариев - Тэги: content, HostCMS



Декабрь 14, 2015

Подключение Яндекс.Диск в Linix Mint (или Ubuntu)


Столкнулся с проблемой: дистрибутивы которые на сайте Яндекс-Диска почему-то не работают (Linux Mint 16).
Но выход все же есть:
Заходим в проводник. «Меню» -> «Соединится с сервером…».
В этом окне:

Сервер: webdav.yandex.ru

Порт: 443 (обычно ставится по умолчанию)

Тип: Защищенный WebDAV (HTTPS)

Папка: / (это корневая папка яндекс-диска)

Имя пользователя: логин_почты@yandex.ru

Пароль: пароль от яндекс — почты

Надо не забыть поставить галочку «Запомнить пароль».

В левой панели файлового менеджера в разделе «Сеть» появится «папочка» с яндекс-диском (скриншот не выкладываю, так как имени папке есть указан логин от яндекса).

Что бы яндес-диск всегда был под рукой и не пришлось к нему подключатся при размонтировании  целесообразно добавить его в избранное файлового менеджера.
Для этого надо зайти в папку яндекс-диска, в меню файлового менеджера выбрать «Закладки» -> «Добавить в закладки» . После добавления закладку можно переименовать как угодно.

Запись в: Ubuntu / Mint / Debian - Без комментариев - Тэги: linux, Mint, ubuntu, Yandex, Yandex-disk, файловый менеджер, Яндекс, Яндекс-диск



Декабрь 03, 2015

Восстановление большой база данных


Столкнулся с тем, что надо было восстановить базу данных из дампа. Размер дампа был около гигабайта. Естественно, phpMyAdmin такой большой объем не восстанавливал, даже если файл заархивирован. Лезть в настройки php очень не хотелось.
Создал новую базу, задал нового пользователя.
Для примера назову базу DB_BASE, пользователь DB_USER, пароль 123.
Дальше залил дамп базы в /home. Пусть он будет называться mydatabase.sql
И дальше по ssh выполнил следующую команду:

mysql -uDB_USER -p123 -f DB_BASE < /home/mydatabase.sql


После долгих потуг база восстановилась.
Иногда нужно указать кодировку базы. Это решается так:

mysql -uDB_USER -p123 -f --default-character-set=UTF8 DB_BASE < /home/mydatabase.sql

Запись в: MySQL - Без комментариев - Тэги: PHP, phpMySQL, ssh, terminal, Web-Server, веб-сервер, доступ, Пароли, Пользователь



Ноябрь 10, 2015

Очищаем форму


Встала задача очистить форму при клике на кнопку «Очистить».
Реализовано таким образом:

<form action="<?=$path?>" method="post">
  <input type="text" name="message" placeholder="Введите сообщение" />
  <input type="submit" />
  <button type="button" onclick="form.reset()">Очистить</button>
 </form>
 <script>
  form.alias.value = form.message.value = '';
 </script>

Запись в: JavaScript - Без комментариев - Тэги: content, form, input, форма



Июль 30, 2015

Полный возраст на php


Встала задача, вывести полное количество лет пользователя. Возраст пользователь задает при регистрации в виде даты месяца и дня (формат: YYYY-HH-DD).

Реализовано это так:

<?php
function getAge($y, $m, $d) { // в качестве параметров будут год, месяц и день
 if($m > date('m') || $m == date('m') && $d > date('d')){
  return (date('Y') - $y - 1); // если ДР в этом году не было, то ещё -1
 } else{
  return (date('Y') - $y); // если ДР в этом году был, то отнимаем от этого года год рождения
 }
}
$dr_date = explode("-", $player_tmp[$sid]["dr_date"]); //Разбиваем переменную по дилиметру "-", получаем массив.
?>
<!--- Вставляем в то место страницы, где надо вывеси полный возраст ---->
<?=getAge($dr_date[0], $dr_date[1], $dr_date[2])?>

Запись в: PHP - Без комментариев - Тэги: php



Апрель 16, 2015

ПРОВЕРКА АВТОРИЗОВАН ЛИ ПОЛЬЗОВАТЕЛЬ


Задача:
Компонент должен выводится только авторизированным пользователям. Для не авторизированных должно выводится сообщение о том, что доступ доступен только для авторизированных.

<?
global $USER;
if ($USER->IsAuthorized()){
$APPLICATION->IncludeComponent(
# Код компонента
);
} else {
echo 'Пожалуйста авторизируйтесь';
}
?>

Запись в: 1с-Битрикс - Без комментариев - Тэги: 1C-Bitrix, 1С-Битрикс, Authorized, IsAuthorized, user, Авторизация, доступ, Пользователь