Воспользуемся такой функцией для получения последнего ключа массива . Входной параметр — массив.
1 2 3 4 |
function endKey($array){ end($array); return key($array); } |
Сайт использует технические и персональные данные пользователей для получения маркетинговой и статистической информации. Условия обработки персональных данных посетителей можно ознакомиться по ссылке.
В случае Вашего не согласия с этими условиями - просим Вас покинуть данный сайт. Если Вы продолжаете находиться и использовать сайт - Вы автоматически выражаете свое согласие с условиями обработки персональных данных пользователей сайта
Создание сайтов и интернет магазинов на битриксе
Воспользуемся такой функцией для получения последнего ключа массива . Входной параметр — массив.
1 2 3 4 |
function endKey($array){ end($array); return key($array); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php function endKey($array){ end($array); return key($array); } ?> <p class="writer">Автор: <?php $mas_temp=$arResult['DISPLAY_PROPERTIES']['ATT_AUTHOR']['LINK_ELEMENT_VALUE']; $key_end=endKey($mas_temp); foreach($arResult['DISPLAY_PROPERTIES']['ATT_AUTHOR']['LINK_ELEMENT_VALUE'] as $key=>$val){ ?> <a href="<?= '/avtory/?ELEMENT_ID='.$key ?>"><?=$val['NAME']?></a> <?php if($key_end!=$key){ echo ','; } } ?></p> |
Маленькое резюме- текущая статья устарела в начале 2018 года, когда переписали это расширение. здесь можно взять общую организацию проекта. Я как автор опасаюсь, что вас веду в заблуждение. Если я опять возьмусь за разработку на Yii2- обязательно скорректирую эту статью, но с новым кодом. Если у вас есть конкретные корректировки- присылайте, я буду благодарен и будут благодарны многочисленные читатели этой статьи.
——————
Это настройки в файл web
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
'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 ], ..... ], |
1)Создаём предварительно почту на yandex. Можно с делегированием почты на яндекс, можно чисто на яндексе.
2)выставляем в файле web, настройки
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
'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
1 2 3 4 5 |
Yii::$app->mailer->compose() ->setTo('email кому отправляем') ->setFrom([ 'admin@xxxxxx.ru -зарегистрированная почта яндекса'=> 'имя отправителя']) // выставить почту . Ту самую, от которой и настроена отправка в конфиге. У нас это admin@xxxxxx.ru.Если не выставить , то хана. Через яндекс не отправишь ->setTextBody('text письма') ->send(); |
Вот вариант, который по умолчанию прописан внутри ContactForm.php берет почту из настроек:
1 2 3 4 5 6 7 |
Yii::$app->mailer->compose() ->setTo($email) //->setFrom([$this->email => $this->name]) - Это неправильная запись, тк. $this->email приходит значение из формы. А оно обязательно будет отличным от имени почты яндекса ->setFrom([\Yii::$app->params['supportEmail'] => $this->name]) - это правильная, если в конфиге у вас прописан supportEmail- ему и отправим ->setTextBody($this->body) ->send(); |
Если не прописана почта, то надо напрямую прописать.
1 2 3 4 5 |
Yii::$app->mailer->compose() ->setTo($email) ->setFrom(['admin@xxxxxx.ru' => 'имя отправителя']) ->setTextBody('тело письма') ->send(); |
Можно сделать шаблон для отправки методами Yii2, для этого создаем файл /mail/contact.php .
сам файл
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<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> |
прописываем отправку
1 2 3 4 5 |
Yii::$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
нам понадобится детектор мобильника http://mobiledetect.net/ — файл Mobile_Detect.php кладем в корень
1.в шабке шабона Joomla пишем до тега Head , заменя верхний Тег html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php require_once $_SERVER['DOCUMENT_ROOT'].'/Mobile_Detect.php'; $detect = new Mobile_Detect; if ($detect->isMobile()){ $mobil=true; }else{ $mobil=false; } //$mobil=true; if($mobil==true){ ?> <!DOCTYPE html> <html lang="ru"> <?php }else{ ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <?php } ?> .... |
шаг 2.
Добавляем
1 |
<meta name="viewport" content="width=device-width, initial-scale=1" /> |
шаг 3. заменяем боди
1 |
<body class="<?php if($mobil==true){ echo 'mobil'; } ?>"> |
шаг 4. Верстаем для основной верссии - напревав на мобильную
шаг 5. адаптируем основную в мобильную
для этого мы пеереопределяем оберточные классы , это будет выглядеть как то так
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
.mobil .predlozhenie_out, .mobil .predlozhenie_in, .mobil .predlozhenie_list>li, .mobil .remont_vseh_modeley_out, .mobil .remont_vseh_modeley_in, .mobil .master_vo_vseh_rayonah_out, .mobil .master_vo_vseh_rayonah_in, .mobil .main_dejurnyi_master_out, .mobil .main_dejurnyi_master_in, .mobil .main_otzivy_out, .mobil .main_otzivy_in, .mobil .main_kachestvo_block_out, .mobil .main_text, .mobil .osnovnye_polomki_out, .mobil .osnovnye_polomki_in, .mobil .ceny_na_remont_out, .mobil .remont_vseh_modeley_content_block, .mobil .ceny_na_remont_in { width:100%; min-width:320px; height:auto; text-align:center; } |
некоторые объекты скроются
1 2 3 4 5 |
.mobil .predlozhenie_line_right, .mobil .predlozhenie_strelka { display:none; } |
вот так выставим вертикальные списки по 2 элемента
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
.mobil .remont_vseh_modeley_list ul:nth-child(2), .mobil .remont_vseh_modeley_list ul:nth-child(1) { display:block; width:40%; background-image:none; } .mobil .remont_vseh_modeley_list ul:nth-child(1){ margin-left:5%; } .mobil .remont_vseh_modeley_list::after{ content:" "; clear:both; display: block; } |
Вот так из списка оставляем только первый элемент (например 1 отзыв из трех, которые были сделаны float:left)
1 2 3 4 5 6 7 8 |
.mobil .main_kachestvo_block ul li { display:none; } .mobil .main_kachestvo_block ul li:first-child { display:block; } |
вот так переопределяем заголовки
1 2 3 4 5 |
.mobil .content p.title{ font-size: 19px; box-sizing:border-box; text-align:center; } |
для таких строк есть функция. Не благодарите.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
function json_encode_cyr($str) { $arr_replace_utf = array('u0410', 'u0430','u0411','u0431','u0412','u0432', 'u0413','u0433','u0414','u0434','u0415','u0435','u0401','u0451','u0416', 'u0436','u0417','u0437','u0418','u0438','u0419','u0439','u041a','u043a', 'u041b','u043b','u041c','u043c','u041d','u043d','u041e','u043e','u041f', 'u043f','u0420','u0440','u0421','u0441','u0422','u0442','u0423','u0443', 'u0424','u0444','u0425','u0445','u0426','u0446','u0427','u0447','u0428', 'u0448','u0429','u0449','u042a','u044a','u042b','u044b','u042c','u044c', 'u042d','u044d','u042e','u044e','u042f','u044f'); $arr_replace_cyr = array('А', 'а', 'Б', 'б', 'В', 'в', 'Г', 'г', 'Д', 'д', 'Е', 'е', 'Ё', 'ё', 'Ж','ж','З','з','И','и','Й','й','К','к','Л','л','М','м','Н','н','О','о', 'П','п','Р','р','С','с','Т','т','У','у','Ф','ф','Х','х','Ц','ц','Ч','ч','Ш','ш', 'Щ','щ','Ъ','ъ','Ы','ы','Ь','ь','Э','э','Ю','ю','Я','я'); //$str1 = json_encode($str); $str1 = $str; $str2 = str_replace($arr_replace_utf,$arr_replace_cyr,$str1); return $str2; } |
что бы обрезать строку в php до целого слова надо использовать следующую функцию.
На вход подаются входной текст, количество строк, и окончание обрезки, например символы ‘…’ (три точки)
1 2 3 4 5 6 7 8 9 10 |
function words_limit($input_text, $limit = 50, $end_str = '') { $input_text = strip_tags($input_text); $words = explode(' ', $input_text); // создаём из строки массив слов if ($limit < 1 || sizeof($words) <= $limit) { // если лимит указан не верно или количество слов меньше лимита, то возвращаем исходную строку return $input_text; } $words = array_slice($words, 0, $limit); // укорачиваем массив до нужной длины $out = implode(' ', $words); return $out.$end_str; //возвращаем строку + символ/строка завершения } |
Цены
1500 р/чБолее подробно тут: https://ftask.ru/цены