вот статья
https://dev.1c-bitrix.ru/learning/course/?COURSE_ID=43&LESSON_ID=5119&LESSON_PATH=3913.4776.5119
вот список для gitingore
/bitrix/activities/bitrix/
/bitrix/admin
/bitrix/cache
/bitrix/components/bitrix/
/bitrix/gadgets/bitrix
/bitrix/image_uploader
/bitrix/images
/bitrix/js
/bitrix/managed_cache
/bitrix/stack_cache
/bitrix/modules/advertising
/bitrix/modules/bitrix.sitecommunity
…
/bitrix/modules/xdimport
/bitrix/modules/xmpp
/bitrix/modules/.htaccess
/bitrix/otp
/bitrix/sounds
/bitrix/template/
/bitrix/themes
/bitrix/tmp
/bitrix/tools
/bitrix/wizards/bitrix
/bitrix/[^/]*\.php$
/upload
/bitrix/php_interface
/bitrix/panel/
/bitrix/updates/
/bitrix/fonts/
-
bitrix и git — gitignore
-
Bitrix — получить свойства элемента по id
Получаем свойства в битриксе так:
123456789$id_el_catalog= 3; // id элемента$id_iblok_catalog= 1; //это число-id инфоблока$db_props = CIBlockElement::GetProperty($id_iblok_catalog, $id_el_catalog, array("sort" => "asc"), Array("CODE"=>"ATT_SERIYA_BOOK")); // ATT_SERIYA_BOOK - значение этого поля нам надо получитьif($ar_props = $db_props->Fetch())$ATT_SERIYA_BOOK = IntVal($ar_props["VALUE"]);else$ATT_SERIYA_BOOK = false;print_r($ATT_SERIYA_BOOK);Внимание! если полей нет , то будет всегда false!
Вот ссылка на документацию;
https://dev.1c-bitrix.ru/api_help/iblock/classes/ciblockelement/getproperty.php -
Bitrix- получить имя по id элемента
Всё очень просто. вот такой код и выводит по id.
1234$obElement = CIBlockElement::GetByID(38);if($arEl = $obElement->GetNext()){echo $arEl["NAME"];} -
Публичный ключ ssh для windows 7 -подключение к gitlab без пароля
Создание публичного ключа в windows 7
открываем git bush в папке пользователя (
c:\Users\alex\
выполняем команду
ssh-keygenЖмем несколько раз энтер (пропуская пароли)
Затем чеерз файловый менеджер заходим в C:\Users\alex\.ssh\
ищем файл id_rsa.pub открываем и копируем все его содежримое в gitlab
https://gitlab.com/profile/keys -
Yii2 и Git- файлы для gitignore
Vendor коммитить в Yii2 не нужно. В приложении уже есть .gitignore, где всё настроено. В него добавьте строки:
/yii
/web/.htaccess
/web/index.php
/web/index-test.php
/config/db.php
/config/params.php(если у Вас basic шаблон) и комитьте всё остальное. После git pull на сервере просто вручную докинете эти файлы и запустите composer install, чтобы появилась такая же vendor. А потом при composer update у себя будет обновляться composer.lock. Комитьте его и на сервере запускайте composer install, чтобы содержимое vendor подтянулось до нужных версий. И в первый раз в composer.json поставьте minimum-stability в stable, если там стоит dev, и запустите composer update. А если это новый проект, то в самой команде composer create-project ставьте stable.
Дополнения к технологии буду добавлять по мере изучения -
Yii2 — Несколько полезных фитч для компонента costa-rico/yii2-images
Маленькое резюме- текущая статья устарела в начале 2018 года, когда переписали это расширение. здесь можно взять общую организацию проекта. Я как автор опасаюсь, что вас веду в заблуждение. Если я опять возьмусь за разработку на Yii2- обязательно скорректирую эту статью, но с новым кодом. Если у вас есть конкретные корректировки- присылайте, я буду благодарен и будут благодарны многочисленные читатели этой статьи.
——————
Это настройки в файл web123456789101112131415'components' => [....// компонет рисунков'yii2images' => ['class' => 'rico\yii2images\Module',//be sure, that permissions ok//if you cant avoid permission errors you have to create "images" folder in web root manually and set 777 permissions'imagesStorePath' => 'upload/store', //path to origin images'imagesCachePath' => 'upload/cache', //path to resized copies'graphicsLibrary' => 'GD', //but really its better to use 'Imagick''placeHolderPath' => '@webroot/upload/store/no-image.png', // if you want to get placeholder when image not exists, string will be processed by Yii::getAlias],.....], -
git клонирование в корень сайта
Клонирование в корень например такого проекта
git clone https://github.com/maler1988/cookies.git .
точка в конце обозначает, что нужно клонировать репозиторий в текущую папку (корень ) -
yii2 smtp отправка через yandex.
1)Создаём предварительно почту на yandex. Можно с делегированием почты на яндекс, можно чисто на яндексе.
2)выставляем в файле web, настройки
123456789101112131415161718'mailer' => ['class' => 'yii\swiftmailer\Mailer',// send all mails to a file by default. You have to set// 'useFileTransport' to false and configure a transport// for the mailer to send real emails.'useFileTransport' => false,'htmlLayout'=>false,'textLayout'=>false,'transport' => ['class' => 'Swift_SmtpTransport','host' => 'smtp.yandex.ru','username' => 'admin@xxxxxx.ru','password' => 'xxxxxxxxx','port' => '465','encryption' => 'ssl',],],3)Самая простая отправка smtp
12345Yii::$app->mailer->compose()->setTo('email кому отправляем')->setFrom([ 'admin@xxxxxx.ru -зарегистрированная почта яндекса'=> 'имя отправителя']) // выставить почту . Ту самую, от которой и настроена отправка в конфиге. У нас это admin@xxxxxx.ru.Если не выставить , то хана. Через яндекс не отправишь->setTextBody('text письма')->send();Вот вариант, который по умолчанию прописан внутри ContactForm.php берет почту из настроек:
1234567Yii::$app->mailer->compose()->setTo($email)//->setFrom([$this->email => $this->name]) - Это неправильная запись, тк. $this->email приходит значение из формы. А оно обязательно будет отличным от имени почты яндекса->setFrom([\Yii::$app->params['supportEmail'] => $this->name]) - это правильная, если в конфиге у вас прописан supportEmail- ему и отправим->setTextBody($this->body)->send();Если не прописана почта, то надо напрямую прописать.
12345Yii::$app->mailer->compose()->setTo($email)->setFrom(['admin@xxxxxx.ru' => 'имя отправителя'])->setTextBody('тело письма')->send();Можно сделать шаблон для отправки методами Yii2, для этого создаем файл /mail/contact.php .
сам файл12345678910111213141516171819<div class="table-responsive"><table style="width: 100%; border: 1px solid #ddd; border-collapse: collapse;"><thead><tr><td style="padding: 8px; border: 1px solid #ddd;">Имя</td><td style="padding: 8px; border: 1px solid #ddd;"><?=$model->name?></td></tr><tr><td style="padding: 8px; border: 1px solid #ddd;">е-майл</td><td style="padding: 8px; border: 1px solid #ddd;"><?=$model->email?></td></tr><tr><td style="padding: 8px; border: 1px solid #ddd;">Сообщение</td><td style="padding: 8px; border: 1px solid #ddd;"><?=$model->body?></td></tr></tbody></table></div>прописываем отправку
12345Yii::$app->mailer->compose('contact', ['model' => $this])->setTo($email)->setFrom([\Yii::$app->params['supportEmail'] => $this->name])->setTextBody($this->body)->send();Здесь:
compose(‘contact’, [‘model’ => $this])- первое значение это шаблон contact.php в папке /mail/contact.php
а [‘model’ => $this] -переменная model которая передаётся в шаблон. $this- не обязателен, вместо него может что угодно, любая переменная.\Yii::$app->params[‘supportEmail’] — код который берет значения из массива config/params.php
-
Yii2 Left join в поиске — 2 варианта
Существуют минимум 2 варианта одного и того же синтаксиса left Join для yii2
Рассмотрим построение в yii2 вот такого запроса :
1SELECT `tezis`.* FROM `tezis` LEFT JOIN `category_item` ON `tezis`.`id` = `category_item`.`id_item` WHERE `id_category`='42' LIMIT 201. Вариант , ближе к sql запросам. category_item- это название таблицы . where — это по категории.
1$query =Tezis::find()->leftJoin('category_item', 'category_item.id_item = tezis.id')->where(['id_category'=>$id_category]);2 второй вариант, с использованием, hasMany . categoryitems — геттер из модели.
1$query =$query =Tezis::find()->joinWith('categoryitems')->where(['id_category'=>$id_category]);Вот сам геттер для реализации связи HasMany в модели Tezis.
12345public function getCategoryitems(){return $this->hasMany(CategoryItem::className(),['id_item' => 'id']);}Не забываем, если надо указать All в конце для поиска.
Вот пример функии Search , в которую передаеём id категории и используем Join left
123456789101112131415161718192021222324252627282930313233343536373839404142public function search($params ,$id_category=''){//$query =Tezis::find()->with('categoryitems')->leftJoin('category_item', 'category_item.id_item = tezis.id');if(!empty($id_category)){// оба варианта равнозначны!!!//$query =Tezis::find()->leftJoin('category_item', 'category_item.id_item = tezis.id')->where(['id_category'=>$id_category]);$query =$query =Tezis::find()->joinWith('categoryitems')->where(['id_category'=>$id_category]);}else{$query =Tezis::find();}// всё что ниже не исправлялось. Как gii сгенерировало- так и оставили.// add conditions that should always apply here$dataProvider = new ActiveDataProvider(['query' => $query,]);$this->load($params);if (!$this->validate()) {// uncomment the following line if you do not want to return any records when validation fails// $query->where('0=1');return $dataProvider;}// grid filtering conditions$query->andFilterWhere(['id' => $this->id,'status' => $this->status,]);$query->andFilterWhere(['like', 'text_mini', $this->text_mini])->andFilterWhere(['like', 'text', $this->text]) ;return $dataProvider;} -
Bitrix — ликбез по навигации
1.в каждом компоненте есть свойство- INCLUDE_IBLOCK_INTO_CHAIN оно добавляет один промежуточный шаг в цепочку навигации.
2.В каждом разделе есть файл .section.php — он отвечает за заголовки.
2.а)$sSectionName = «Лучшие книги»;- это промежуточный элемент в навигации , если выставлен INCLUDE_IBLOCK_INTO_CHAIN=Y(1 главная , последний — заголовки). Если не выставлен, то последний.
2.b) $sSectionName- можно закомментировать и мы получим дополнительный вариант навигации, без последнего слова.
3)Добавляем в навигационную цепочку еще один пункт: $APPLICATION->AddChainItem(‘строка’).
4. Избавляемся от лишних элементов навигации, рецепт. отключаем все INCLUDE_IBLOCK_INTO_CHAIN =N (останутся лишь названия секции), затем в .section.php выставляем $sSectionName.5.Эта запись добавляет в конец навигации пункты секции. — еще тоже можно отключить, если нужно, или включить.
«ADD_SECTIONS_CHAIN» => «Y»,
Цены
1500 р/чБолее подробно тут: https://ftask.ru/цены