Поездка в Норвегию в марте на машине из Питера. Красота дороги, фьордов, снега и гор. «Беспощадный, но не бессмысленный»: Сергей Расшиваев — о серфинге в России Правило создания ЧПУ для разделов

08.06.2017

12 наивных вопросов от начинающих серферов.

Для тех, кто давно мечтает о серфинг‑каникулах, Рамблер.Путешествия приготовили специальный ликбез. Как выбрать школу из огромного количества тех, что существуют? Почему совсем не обязательно ехать на Бали? Сколько денег копить? И чему можно научиться за две недели отпуска? Об этом рассказывает один из самых известных российских серферов Сергей Расшиваев.

Профайл: Сергей Расшиваев

Португалия

В какой стране начинать серфить?

Начинающим серферам стоит присмотреться к Европе и Африке, а именно к таким странам, как Испания, Португалия и Марокко. Во‑первых, эти страны находятся относительно недалеко от России, и авиаперелет займет не больше пяти часов. Во‑вторых, там прекрасно развита серферская инфраструктура, а цены на обучение гораздо ниже, чем, к примеру, в Мексике или Доминикане. Но есть и минусы - климат и в Марокко, и в Испании с Португалией довольно капризный, и искать там волны следует в конкретные сезоны. К тому же многие недолюбливают Атлантический океан из‑за холодного Канарского течения.

Правда ли, что Бали - это лучшее место в мире для серфинга, или вокруг него создан большой миф?

Самого лучшего места для серфинга не существует - оно у каждого свое. Одним нравится путешествовать по Европе, другим - по Америке, а третьи и вовсе разъезжают по всему свету в поисках больших волн. Бали - это действительно хороший вариант для тех, кто хочет встать на серф. На этом индонезийском острове буквально все дышит серфингом: здесь множество серф‑шопов, школ и кемпингов. Но так же много и людей - что в воде, что на берегу, и надо быть готовым к тому, что на одну волну всегда находится много желающих. Чтобы не разочароваться в волнах и Бали в целом, лучше всего ехать туда во время нашего лета (у них в это время зима), когда пляжи и вода становятся чище, а волны - больше. Главное заблуждение новичков заключается в том, что они думают: ага, раз на Бали самые лучшие волны, значит мы там быстро научимся кататься. Волны на Бали действительно отличные, но ни один новичок не сможет оценить самые знаменитые споты острова. Для этого нужно кататься очень долго и очень прилично.

Из других индонезийских спотов очень советую место под названием G‑Land на острове Ява с известной во всем мире левой волной. Серф‑кемп находится в джунглях прямо напротив этой волны, и вокруг совершенно спокойно разгуливают вараны и обезьяны. Там очень красивые закаты и пляжи, поэтому съездить к этому споту стоит, даже если вы не собираетесь кататься.

Норвегия



Как новичку подготовиться к занятиям серфингом? Какие упражнения будет полезно выполнять до отпуска?

Подготовка нужна даже тем, кто считает, что находится в хорошей спортивной форме. Есть люди, которые научились быстро кататься на сноуборде и думают, что так же легко освоят серф. Это не так. Серфинг- очень энергозатратный вид спорта. Самое важное в подготовке - начать плавать, причем не просто купаться в бассейне, а тренироваться с инструктором, который научит вас плавать правильно. Не пренебрегайте и кардиотренировками: займитесь бегом или ездой на велосипеде.

Доминикана

Второй важный момент - это растяжка и гибкость, жизненно необходимые для серфинга. У всех лучших серферов отличная растяжка! Основной акцент -на мышцы ног, таза и спины. Для этого прекрасно подойдут йога и восточные единоборства. И поработайте над координацией. Не секрет, что чем лучше она развита у человека, тем лучше он серфит.

Камчатка

Самый быстрый прогресс у людей, которые серьезно или даже профессионально занимаются плаванием, танцами, гимнастикой и йогой. На первых этапах обучения лидируют девушки - потому что делают то, что им говорит инструктор, ничего от себя не придумывают и не пытаются что‑то кому‑то доказать. Потом, когда встает вопрос страха перед волнами, вперед уходят парни. Серфинг требует упорства, и надо понимать, что это не то занятие, где важны лишь результаты; необходимо получать удовольствие от самого процесса, и именно тогда человек остается в серфинге надолго. Тот, кто ждет мгновенного результата, быстро уйдет из серфинга - у него просто не хватит терпения.

Объединенные Арабские Эмираты

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

- В самостоятельном обучении есть масса минусов и практически нет плюсов. 99 процентов решивших сэкономить в итоге тратят свои деньги и драгоценный отпуск впустую, так не научившись тому, чему могли бы. То, что они выучивают за неделю, в школе проходят за одно занятие. Прогресс идет страшно медленно, ошибки никто не объясняет. Ясное дело, что после таких мучений многие люди забрасывают серфинг насовсем.

Хотя вариантов, где найти себе инструктора, множество. Можно нанять местного серфера‑аборигена (главное, чтобы он не был обычным парнем с улицы и имел международный сертификат инструктора), либо записаться в серф‑школу. Или поселиться в серф‑кемпинге, что я считаю самым оптимальным решением. В кемпе вы отделены от потока туристов и сконцентрированы на серфинге практически 24 часа в сутки. Получаете максимум за минимум времени. Пять или шесть дней в неделю вы только и делаете, что серфите, не вылезая из воды. Помню, что после своей первой поездки в португальский серф‑кемп я буквально умирал - так безумно болело все тело.

Калиниград

Мальдивы

Какой серф подходит новичку? Стоит ли учиться на разных досках или лучше некоторое время провести на одной?

Учиться кататься лучше на лонгборде - длинной доске. На короткой вы только замедлите свой прогресс и потеряете время. Новички часто стараются поскорее перейти на шортборды, и в этом заключается их ошибка. Формула в принципе простая: чем больше опыта, тем короче доска. Не спешите покупать серф, гораздо проще брать его в аренду. Тем более что в школах выдают специальные, покрытые мягким материалом доски, которые вас не травмируют во время обучения.

Доминикана

Если все же не терпится стать обладателем серфа, обратите внимание на такие всемирно известные бренды, как Firewire, Rusty, Channel Island и Mayhem. Только отправляйтесь в магазин со знающим человеком, иначе не угадаете и купите совершенно не то, что вам в данный момент нужно.

Италия, Сардиния

Как выбрать себе серфинг‑школу из огромного количества тех, что существуют? С виду‑то они все одинаковые.

- Критерии, по которым люди подбирают себе школу, такие: цена, программа обучения и рекомендации друзей. Одни идут туда, где дешевле, другие - туда, где удачно покатался приятель. В идеале школа должна существовать хотя бы несколько лет и быть известной в серферском мире. Не стоит «клевать» на титулы инструкторов - они зачастую не имеют никакого значения. Ведь вам в первую очередь нужен адекватный тренер, а не человек, который покажет сотню трюков, но толком ничему не научит. Если затрудняетесь с выбором места, обращайтесь к нам, в Surfholidays. Мы часто выступаем в роли советчиков, подсказывая людям, каким школам и кемпингам стоит доверять, а каким нет. На нашем же сайте можно узнать про десятки разных спотов по всему миру - где хорошо кататься, а где не очень.

Камчатка

Не стоит полагаться на турфирмы. Люди, которые в них работают, никогда не вставали на доски и стряпали свои «серферские турпакеты» буквально на коленке. Займитесь подбором школы сами, все‑таки это очень ответственный момент. Кстати, бронировать «учебное место» иногда лучше заранее, чтобы вы были уверены, что вас ждут и тренер, и доска. Иногда за бронь школы даже делают скидки.

Камчатка

Есть такое понятие, как международный кодекс серфера - свод правил, как вести себя в воде. Какие из них наиболее важны? И посоветуйте, как побороть свой страх перед волнами.

Есть пять правил, которые должен вбить себе в голову серфер‑новичок: уважайте океан, себя и людей вокруг вас; слушайте, что говорит вам инструктор; соблюдайте правила безопасности; не «крадите» чужую волну; не мусорьте. Безусловно, есть много других правил и нюансов. Например, не забывайте мазаться кремом от загара, даже если пасмурно, и не заходите в воду глубже, чем по грудь (катание сильно изнуряет, и у вас может не остаться сил, чтобы добраться до берега вплавь). Если катаетесь в одиночку, выберите песчаный пляж, на котором волна не падает прямо у берега, и есть безопасная пена - то есть то, что образуется после обрушения волны. Именно на пене проходят первые уроки серфинга. На ней ездят к берегу и отрабатывают технику.

Норвегия

Преодолеть страх перед большими волнами можно только практикой, практикой и еще раз практикой. Даже знаменитый Келли Слейтер, 11-кратный чемпион мира, боялся больших волн, когда начинал кататься.

Шри Ланка

Назовите имена серферов, видео с участием которых стоит обязательно посмотреть на YouTube.

- Мои любимые серферы - это Мик Фаннинг и Келли Слейтер. Они оба ведут здоровый образ жизни, мне это близко. Стиль Мика - это скорость и идеально отточенные классические трюки (смотрите видео). Стиль Келли даже не описать, он просто лучший, и в свои 40 лет делает такие трюки, о которых другие и не мечтают (видео). Не пропустите шикарные кадры с турнира Rip Curl Pro Bells Beach 2012, где Келли с Миком соревнуются в финале.Из молодежи мне нравятся Джулиан Вилсон (видео) и Джон Флоренс - оба катаются очень сильно и практически все время проводят в воздухе!

Камчатка

Чему можно научиться за две недели отпуска?

Немногому. Главное за это время хотя бы научиться стоять на доске. Освоить трюки точно не успеете - для этого потребуются несколько месяцев. Хотя серфинг настолько сложный вид спорта, что в нем любой поворот - это трюк. Самым простым трюком, который на деле является одним из главным элементов в катании, считается «боттом тёрн» (bottom turn) - когда поворачиваешься на дне волны после скатывания с нее. Один из самых сложных трюков - «труба»: когда серфер едет внутри закручивающейся волны. Если вы за время отпуска научитесь просто хорошо ехать вдоль волны - это будет очень хороший результат.



Норвегия

Великобритания, Уэльс

Имеет ли смысл «гнаться» за конкретным местом с хорошими волнами или лучше приезжать в те места, где количество спотов не ограничено?

Смысла искать «тот самый спот, о котором я читал в каком‑то журнале» нет, особенно если вы делаете первые шаги в серфинге. Тем более что все рейтинги серф‑спотов субъективны. Пляжей, которые идеально подходят для новичков, тысячи. Не советовал бы только ехать на Мальдивы - они больше подходят опытным парням. Главное - попасть в сезон и приехать туда, где есть волны. Достаточно подробно о качестве и типах волн в тысячах спотов по всему миру написано на сайте Wannasurf.com, я постоянно им пользуюсь. Имейте в виду, что никто не знает местные волны лучше, чем серферы‑аборигены. Если я оказываюсь на новых пляжах, то часто обращаюсь к гидам, которые и хорошую волну помогут найти, и подскажут, где может быть опасно из‑за камней или кораллов. Помните: не зная броду, не лезьте в воду. В серфинге это тоже работает.

Франция

Как не растерять приобретенные навыки, вернувшись домой?

Постарайтесь сохранить свою физическую форму - плавайте, бегайте, делайте растяжку. И если вас всерьез зацепил серфинг, сделайте все возможное, чтобы поскорее вернуться на пляж. Потому что, если пройдет полгода, вам, к сожалению, придется начать обучение с нуля.

Топ-5 стран для новичка в серфинге по версии Сергея Расшиваева

Испания. Десятки мест, где можно кататься, есть в провинции Астурия. Особенно хороши споты у городка Вильявисиоса, который находится в устье реки, где делают сидр и играют на волынках. Не пропустите местный пляж Родилес.

Португалия. Мне нравится провинция Алгарве. Это первое место, где я серфил, и оно до сих пор остается одним из моих любимых. Кстати спот там так и называется - Любимый пляж (Praya do Amado).

Марокко. Одно из самых серфовых мест - поселок Таразут, что неподалеку от Агадира. В 4 километрах от него находится поселок Тамрат, куда тоже стоит обязательно съездить.

Индонезия. Это, разумеется, Бали с множеством самых разнообразных пляжей. Но там бывает слишком многолюдно, поэтому серферы поопытнее любят сбегать на соседние Яву, Ломбок и Лембонган.

Доминикана. Страна с чистыми, красивыми пляжами и небольшим количеством серферов. Кататься нужно приезжать зимой - в это время года там бывают шикарные и погода, и волны. Все серфовые места находятся на севере острова.

Владивосток

ЦЕНА ВОПРОСА

Самая дешевая страна для серфинга (как, впрочем, и для многого другого) - это Индонезия. Школу там можно найти за $ 250 в неделю, а если кататься самостоятельно, то и вовсе придется платить лишь за аренду доски - то есть $ 5-8 в день. Однако до Бали еще нужно долететь, поэтому прибавьте к стоимости обучения и проживания еще 1000-1500 долларов за авиабилеты туда‑обратно. Стоимость серф‑кемпинга в Марокко стартует от 400 евро в неделю (включены питание, проживание, обучение), примерно такие же цены в Португалии. На Канарах неделя обучения начинается от 300 евро (плюс 10-15 евро в день на еду), на материковой Испании - от 400-500 евро. Цены на перелеты в Европу и Африку зависят от авиалиний и сезона, иногда можно поймать вполне выгодные предложения.

Арктика

Интервью готовила Мария Соснина

Поиск автоэлектрика с выездом в Москве

Автомобили последних моделей потихоньку трансформируются из чисто механического продукта в сплетение электрики и механики, доля электронных деталей в современных авто доходит скорей всего уже к 50 процентам, и это не говоря про электромобили, в которых нет привычного двигателя, топливной аппаратуры, радиатора и так далее. В наши дни при помощи компьютера возможно откорректировать основную часть характеристик машины, от подсветки приборов до количества подаваемого мотору бензина. Это одновременно удобно и вызывает трудности при ремонте автомобиля.

Лет 20-30 тому водители могли отремонтировать электропроводку в авто только пассатижами и мотком изоленты, в то же время в советских машинах и чинить в принципе не было ничего, зажигание и освещение. В современных моделях без автомеханика уже не факт что самостоятельно даже отыщите какой именно провод куда тянется, поэтому уже при самой маленькой неисправности приходится или вести машину в автомастерскую или нанимать здесь http://avtoelektrik-moskva.ru/ автоэлектрика с выездом. Хотя получается и так что до автомастерской на своих колёсах не приехать, к примеру, сгорела проводка или необходима деактивация автосигнализации, тогда только отыскать автоэлектрика с выездом, чтобы на месте поломки определил что делать, или заказывать автоэвакуатор, а потом в любом случае оплатить работу автоэлектрика.

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

  • Перевод
  • Tutorial

На всякий случай - это перевод (многие не замечают этого в интерефейсе ХабраХабра).
«Fat-Free» можно перевести с английского как «Обезжиренный» - фреймворк и в самом деле поражает своим размером (55 КБ) и скоростью работы.

Я наконец-то нашёл лёгкий и быстрый фреймворк. Он умещается в файл размером всего 55Кб и имеет множество возможностей, о которых вы можете узнать на его , поэтому не буду повторяться. Вместо этого я решил сделать небольшой учебник, из которого вы узнаете как сделать свой блог на этом фреймворке.
Вам понадобится PHP 5.3 на сервере. Я использовал Ubuntu 11.04 для написания этого учебника, на которую легко устанавливается эта версия. Если вы работаете на RHEL или Centos то я предлагаю заглянуть вам на IUS Community Project для получения последней версии PHP.

Установка

Fat-Free Framework.
Fat-Free Framework работает одинаково хорошо и в корне сайта, и в подкаталоге. Я предполагаю, что вы будете использовать подкаталог, поскольку вам не нужно будет создавать отдельный сайт для этого урока.
Создайте папку с именем blog и распакуйте содержимое фреймворка в неё. Это должно выглядеть примерно так:

Поднимитесь на один уровень вверх в иерархии каталогов и установите следующие разрешения:

Sudo chgrp -R www-data blog sudo chmod -R 775 blog
Если вы используете Apache, то mod_rewrite должен быть включён. Измените.htaccess и откорректируйте RewriteBase так, чтобы он указывал на папку с блогом. Например: RewriteBase /blog.

Уже сейчас вы можете зайти в папку blog на сервере и увидеть такую страницу:

(Как только вы посетите эту страницу, будет будет создана специальная папка с кешем - не беспокоитесь об этом).

Начало

Всё что нам нужно уже есть в Fat-Free Framework.

Давайте сначала отредактируем главную страницу и создадим подключение к базе данных.

Откройте файл index.php . Закомментируйте параметр кэширования и установите уровень отладки, чтобы вам легче было заниматься разработкой:


Для установки соединения с базой данных добавьте следующее между командами set и run :

F3::set("DB", new DB("mysql:host=localhost;port=3306;dbname=ИмяВашейБазыДанных", "ИмяПользователя", "Пароль"));
Все файлы пользовательского интерфейса находятся в каталоге ui - вы можете удалить welcome.htm и style.css отсюда, так как они просто используются домашней страницей по-умолчанию.

Маршрутизация

Вы должны сказать фреймворку метод запроса (GET, POST, PUT и т.д.), адрес для запроса и как ответить на этот запрос.

Маршрут для домашней страницы:

F3::route("GET /", function () { // делаем что-нибудь });
Эта безымяная функция будет содержать логику для заполнения страницы.

Для просмотра записи блога:

F3::route("GET /view/@id", function () { $id = F3::get("PARAMS["id"]"); });
Это позволяет фреймворку ожидать URI-параметр и присваивает его переменной PHP в функции.

Теперь маршруты для администратора:

// Главная страница администратора F3::route("GET /admin", function () { }); // Страница для добавления материала F3::route("GET /admin/add", function() { }); // Для редактирования материала F3::route("GET /admin/edit/@id", function() { $id = F3::get("PARAMS["id"]"); }); // Служебная для принятия запросов F3::route("POST /admin/edit/@id","edit"); F3::route("POST /admin/add","edit"); function edit() { } // Для удаления F3::route("GET /admin/delete/@id", function() { $id = F3::get("PARAMS["id"]"); });
Обратите внимание, что мы используем одну и ту же функцию для обработки добавления и редактирования сообщений, по этому она имеет имя (остальным функциям имена можно не давать).

Модели

ORMs в Fat-Free Framework делает всю грязную работу за вас - никаких директорий, файлов или кода.

Вот SQL запрос, который создаст 2 таблицы, необходимые для этого урока:

ХабраХабр почему-то не хочет красить этот кусок - прим. перев.

CREATE DATABASE `blog` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; USE `blog`; CREATE TABLE IF NOT EXISTS `article` (`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `timestamp` datetime NOT NULL, `title` VARCHAR(128) NOT NULL, `summary` VARCHAR(128) NOT NULL, `content` text NOT NULL, `author` VARCHAR(128) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO `article` (`id`, `timestamp`, `title`, `summary`, `content`, `author`) VALUES (1, "2011-07-28 02:03:14", "Hello World!", "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut ", "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", "Mr White"), (2, "2011-07-28 02:03:14", "More Hello World!", "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut ", "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", "Mr Green"); CREATE TABLE IF NOT EXISTS `user` (`id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, `password` VARCHAR(255) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO `user` (`id`, `name`, `password`) VALUES ("1", "admin", "password");

Для посетителей

Теперь нам необходимо создать экземпляр объекта Axon, чтобы получить массив результатов. Также мы установим полученное значение в переменную articles.

$article=new Axon("article"); $articles=$article->afind(); F3::set("articles",$articles);
Вы бы могли объединить последнии 2 строчки в одну F3::set("articles",$article->afind()); , но для удобства я оставил две.

Для использования шаблонов нужно создать базовый файл макета в папке ui с именем layout.html :

{{@html_title}}
Движок использует шаблон {{@имя}} для получения значения переменной.

Теперь создадим шаблон для главной страницы, который будет называется blog_home.html :

Blog Titles

{{trim(@item["title"])}} by {{@item["author"]}}

{{@item["summary"]}}


Теперь, когда шаблон готов, мы можем завершить код в index.php для его отображения:

F3::set("content","blog_home.html"); echo Template::serve("layout.html");
Шаблон для ускорения работы приложения будет переделан движком в php код.

Полный пример будет выглядеть так:

F3::route("GET /", function () { F3::set("html_title","Home Page"); $article=new Axon("article"); F3::set("list",$article->afind()); F3::set("content","blog_home.html"); echo Template::serve("layout.html"); });
Теперь мы дожны сделать страницу, на которой будет находиться полный текст записи:

F3::route("GET /view/@id", function () { $id = F3::get("PARAMS["id"]"); // создаём объект Axon и ищем в нём наш id $article=new Axon("article"); $article->load("id="$id""); // устанавливаем переменные для шаблона F3::set("html_title",$article->title); $article->copyTo("POST"); // подключаем сам шаблон F3::set("content","blog_detail.html"); echo Template::serve("layout.html"); });
Шаблон страницы будет находиться в файле blog_detail.html :

{{@POST.title}}

Published: {{@POST.timestamp}} by {{@POST.author}}

{{@POST.content}}

Back to Homepage

Для администратора

На главной странице администратора будут отображаться записи также, как и на главной. По этому код похожий:

F3::route("GET /admin", function () { F3::set("html_title","My Blog Administration"); $article=new Axon("article"); $list=$article->afind(); F3::set("list",$list); F3::set("content","admin_home.html"); echo Template::serve("layout.html"); });
Шаблон хранится в файле admin_home.html :

Панель администратора

Добавить запись

Заголовок Дата Автор Управление
{{@item["title"]}} {{@item["timestamp"]}} {{@item["author"]}} Изменить Удалить

Результат будет примерно такой:

Теперь создадим форму для редактирования и добавления записей в файле admin_edit.html :

Edit

{{ @message }}










Обратите внимание, что есть области для отображения проверки сообщений.

Теперь код для маршрутов:

F3::route("GET /admin/add", function() { F3::set("html_title","My Blog Create"); F3::set("content","admin_edit.html"); echo Template::serve("layout.html"); }); F3::route("GET /admin/edit/@id", function() { F3::set("html_title","My Blog Edit"); $id = F3::get("PARAMS["id"]"); $article=new Axon("article"); $article->load("id="$id""); $article->copyTo("POST"); F3::set("content","admin_edit.html"); echo Template::serve("layout.html"); });
Теперь напишем функцию для редактирования, о которой писалось ранее:

Function edit() { // Reset previous error message, if any F3::clear("message"); $id = F3::get("PARAMS["id"]"); $article=new Axon("article"); //load in the article, set new values then save //if we don"t load it first Axon will do an insert instead of update when we use save command if ($id) $article->load("id="$id""); //overwrite with values just submitted $article->copyFrom("POST"); //create a timestamp in MySQL format $article->timestamp=date("Y-m-d H:i:s"); $article->save(); // Return to admin home page, new blog entry should now be there F3::reroute("/admin"); }

Аутентификация

Добавьте следующие строчки:

// сообщаем фреймворку таблицу с пользователями и передаём значения F3::set("AUTH",array("table"=>"user","id"=>"name","pw"=>"password")); $auth = Auth::basic("sql"); // вход удачный if ($auth) { // сохраняем в сессии F3::set("SESSION.user",$auth->name); // отображаем страницу администратора F3::set("content","admin_home.html"); } else { // вход неудачный F3::set("content","security.html"); }
security.html может выглядеть так:

You must supply valid login details.

Ещё добавьте строчку перед Template::serve:

If (!F3::get("SESSION.user")) F3::set("content","security.html");
Вот и всё. Вы также можете перенаправить пользователя на главную страницу:

If (!F3::get("SESSION.user")) F3::reroute("/");

Итог

Вот так просто можно написать блог с панелью администратора и базой данных.

Скачать готовый пример можно тут -

03.06.2014

Поездка в Норвегию в марте на машине из Питера. Красота дороги, фьордов, снега и гор.

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

Мы уже бывали в этой стране . В этот раз мы отправились в уже практически в Мекку холодного серфинга, на север страны. Финальная наша точка была в маленьком поселке Унстад, на Лофотенских островах.

Для их посещения вам не понадобится ничего особенного, не нужны паромы или супер проходимая машина. Мы доехали на обчном VWGolf.

Единственный трудный участок, который нужно преодолеть, это граница Норвегии и Швеции, там в горах могут быть снегопады. Нужно отдать должное дорожным службам обоих стран, работают они быстро и снег убирают моментально. Так что даже не нужно одевать цепи на колеса. Хотя для уборки могут закрыть дорогу минут на 30-40. Мы даже уже думали повернуть и ехать в объезд, оказалось не нужно и лучше подождать.

Мы стартанули из Санкт-Петербурга и дорога до места заняла 24 часа. Все это время рулила Таня и спала всего пару часов, все остальное время мы ехали. Еду мы взяли частично с собой, частично купили в Финляндии, в целях экономии. В Норвегии высокий уровень жизни и цен соответственно. Единственное на чем сэкономить трудно, это жилье и топливо.

Дорога по Финляндии и Швеции радует разве что вкусным кофе, в остальном же проще спать, так как смотреть особо нечего. Вот Норвегия другое дело. Спать совсем не хочется, вокруг очень красиво. Ощущение нереальности цветов и происходящего. Яркий белый снег, горы и конечно вода во фьордах, все это очень красиво сочетается.

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

Иногда дороги и даже туннели сделаны для городков с пятью домами, а иногда даже и для одного.

Через все Лофотенские острова можно проехать по мостам, правда дорога виляет и поэтому последний участок пути занимает много времени.

Типичные домики норвежской расцветки.

За последнюю неделю заметил на форуме несколько тем, в которых шло бурное обсуждение ЧПУ (человека-понятные ссылки на товары, страницы и т.п.) на отдельных компонентах каталога. Тема всегда оставалась сложной и каждый пытался в ней разобраться, как мог. Отвечать по этой теме сложно, а если подробно, то и неудобно в формате форума, поэтому родилась идея выпустить эту статью.

В 1С-Битрикс есть комплексный компонент управления каталогом bitrix.catalog в котором все достаточно просто, ставится он по умолчанию предварительно настроенный.

При всех его достоинствах в нем есть один недостаток, он поставляется как есть и может подойти не для всех.

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

В начале я бы хотел разобрать более старую схему настройки, которая работала до последнего релиза 15.5 (первая часть статьи). А потом показать, что сделано в продукте в последнем 15.5 релизе, чтобы облегчить достаточно сложную настройку ЧПУ (вторая часть статьи).

Задачи которые мы решаем:

  • Требуется показать раздел, в котором будет своя уникальная страница раздела, файл (index.php ).
  • На всех страницах будет возможность переходить в подразделы данного раздела, файл (list.php )
  • При открытие каждого подраздела заголовок на странице подраздела должен изменится в соответствие с переходом в нужный подраздел
  • Должна открываться карточка товара в рамках этого раздела или подраздела, файл (detail.php ).
  • Требуются хлебные крошки (навигационная цепочка в верхней части страницы), причем на основной странице раздела они не будут отображаться, а на всех подразделах и элементах будут.
Я не любитель делать ненужное программирование, поэтому все решение будет собрано на штатных компонентах 1С-Битрикс, с одной единственной строчкой кода.

Настройка (решение):

Создание раздела файл index.php

Для решения нам понадобится создать небольшую структуру из папки и файлов:

  • Создаем в корневом разделе сайта папку, например (что бы проще понимать для какого раздела эта папка, я взял для названия символьный код раздела): shop-for-confectioner
  • Нам понадобится создать в этой папке три файла: index.php, list.php, detail.php
  • Размещаем в этих файлах компоненты:
  • В файл index.php добавляем компоненты: bitrix:catalog.section.list и bitrix:catalog.section
  • В файле list.php добавляем компоненты: bitrix:catalog.section.list (не обязательный, если не нужна навигация на нижних уровнях), bitrix:news.detail (этим компонентом выведем заголовок раздела), bitrix:catalog.section и завершим все еще раз bitrix:news.detail (покажем SEO текст для раздела) - можно было бы упростить, но хочется показать некоторые моменты упрощающие жизнь под требования SEO специалистов и большую гибкость взаимодействия между компонентами.
  • В файле detail.php добавляем компоненты: bitrix:catalog.section.list и bitrix:catalog.element . Можно сразу добавить схему, вида популярное в этом разделе, добавляем еще bitrix:catalog.section
Выглядит как сложный космический корабль, но даст вам отличную гибкость в формирование разделов с подразделами.

Страницы созданы, компоненты размещены, приступаем к настройке. Нам понадобится инфоблок, в котором лежит наш прекрасный раздел со своими подразделами, который мы и будем выводить. Поехали.

Настройка главной страницы раздела

Давайте разберем настройку первого компонента, bitrix:catalog.section.list , с помощью него мы выведем навигацию по подразделам, нашего основного раздела.

Единственный кусочек в настройке, на который нужно обратить внимание, это указание URL задуманного нами ЧПУ . Он приведет нас к содержимому раздела.

Мы помним, что папка для раздела каталога называется у нас: shop-for-confectioner

А путь ЧПУ я хочу, что бы был вида: /shop-for-confectioner/название-подраздела/название-элемента/

Отлично, смотрим результат настройки:

Отобразились подразделы, в разделе над которым мы работаем.

Разберем настройку следующего компонента bitrix:catalog.section . Он выведет нам отобранный список элементов из всех подразделов нашего раздела. Например, выведем список элементов самых просматриваемых в данном разделе.

В этом компоненте настройка чуть посложней. Нам нужно задать следующее:

  • URL ведущий на страницу с содержимым радела, прописывать путь к нашей папке.
  • Нужно указать URL , который мы хотим видеть при выводе содержимого из раздела. Где SECTION_CODE - построит нам путь из подраздела, которые есть в нашем разделе. Например, у нас структура каталога /магазин кондитера/краски/элементы краски/ во всех разделах прописаны символьные коды, на основание которых и будет построен полный путь. Следующий элемент настройки ELEMENT_CODE выведем в ЧПУ символьный код элемента. Давайте посмотрим, где прописываются символьные коды у разделов и элементов (я покажу для раздела, для элемента схожий).

Естественно я не прописываю символьные коды вручную, пусть этим занимаемся платформа 1С-Битрикс. Для этого, при создание инфоблока, я включил соответствующую настройку:

Не буду подробно останавливаться на галочках данной настройки, тут интересна только одна «Использовать внешний сервис перевода », в ней я настраиваю перевод через Яндекс, указав ключ в настройках «Главного модуля ».

  • Ну и последний элемент настройки, нужно указать, где передается код группы. Указываю тот же - SECTION_CODE
Смотрим результат настроек:

Отобразился список товаров из раздела.
Автоматически формируемый вывод подразделов

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

Вот пример уникального раздела, даже со своим дизайном: http://tortik39.ru/shop-for-confectioner/

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

Настройка страницы отображения подразделов в разделе

Файл - list.php - первым компонентом в нем идет bitrix:catalog.section.list . Разбирать мы его не будем, так как он полностью повторяет настройки как и в файле index.php

А вот следующий компонент необычный - bitrix:news.detail . Этим компонентом, мы выведем из отдельного инфоблока заголовок выбранного подраздела, а его напарником ниже, содержимое SEO текста , которое описывает этот раздел. Это будет такая динамическая структура, которая будем меняться в зависимости от выбранных подразделов, в нашем разделе.

Прежде чем выводить заголовок и текст ниже, нам необходимо создать инфоблок, который будет это все хранить и показать как мы это свяжем.

Настраиваем инфоблок:

Создаем инфоблок «Разделы каталога » - в нем нет свойств и каких либо специфичных настроек. Обычный инфоблок, с выключенной галочкой «торгового каталога ».

Инфоблок создан. Теперь в нем нужно создать столько записей, сколько у нас будет разделов, для которых мы выведем название и SEO текст внизу страницы подраздела или раздела.

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

Идем в наш торговый каталог, в котором уже есть наши разделы с товарами и смотрим их символьные коды:

И на основание этих символьных кодов создаем записи в нашем новом инфоблоке с названиями и SEO текстом внутри, и с такими же символьными кодами. Ниже показаны созданные статьи и заголовки, которые нам пригодятся.

Давайте посмотрим одну такую запись внутри:

Название у нас будет заголовком раздела, для первого компонента: bitrix:news.detail . А текст мы разместим во вкладке «Подробно »:

Более «правильную » связь можно сделать, связав инфоблоки через свойство. И тогда не нужно будет контролировать одинаковость символьных кодов, но зато потребуется при создание элемента раздела каталога, выбирать что мы связываем с ним, в виде нашего элемента статьи. Оба вариант имеют свои плюсы и минусы, мне понравилось в данном случае более простое решение.

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

Приступаем к настройке bitrix:news.detail

Вся настройка сводится к тому, что бы выбрать наш инфоблок, где хранятся статьи, указать в поле «Код новости » следующий код: ={$_REQUEST[«SECTION_CODE"]}

Этим кодом мы будем выбирать новость с таким же символьным кодом, который будет взят с символьного кода раздела.

Ну и напоследок, отключить все лишнее к выводу, фактически нам нужно вывести только заголовок.

Для второго компонента bitrix:news.detail , который выводится внизу страницы, мы делаем полностью аналогичную настройку. Только выводим вместо заголовка саму новость, наш SEO текст .

Давайте посмотрим, что у нас получилось и как это работает. Я записал небольшой видеоролик для показа динамики.

В вашем браузере отключен JavaScript

Получилось то, что нам требовалось.

Теперь нам нужно вывести список товаров из подраздела, нашего раздела, настроить компонент bitrix:catalog.section

Указываем в пункте «Код раздела » выражение ={$_REQUEST[«SECTION_CODE"]} Тем самым выберем символьный код раздела, для которого будем выводить элементы.
Прописываем шаблоны ссылок, для страницы раздела, и элементов раздела. Не забываем о переменной, в которой передается символьный код раздела. Остается настроить нужные данные в компоненте и можно смотреть что получилось.

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

Настройка страницы детальной карточки

Нам нужно настроить страницу, которая будет отображать детальную карточку товара, файл detail.php

В файле страницы у нас три компонента. Останавливаться на компоненте bitrix:catalog.section.list мы не будем, его настройки полностью аналогичны описанным выше.

Второй компонент bitrix:catalog.element как раз и отвечает за отображение детальной карточки товара, давайте его настроим.

Нам нужно получить символьный код раздела и элемента. Делаем мы это, прописывая две строчки для поля «Код элемента » это будет ={$_REQUEST[«ELEMENT_CODE»]} , а для «Кода раздела » это будет ={$_REQUEST[«SECTION_CODE»]} .

Смотрим, что у нас получилось:

Открылась детальная карточка, мы все настроили корректно.

У нас на странице detail.php остался еще один компонент, который мы хотели настроить на вывод популярных товаров в этом разделе, это компонент bitrix:catalog.section .

Давайте подумаем, что такое популярное в разделе. У нас есть фильтр - просмотры, предполагаем, если элементы больше всего смотрят - значит они популярны. Мы можем вывести список элементов отобранных по данному фильтру «самые просматриваемые в разделе ».

Настройка компонента bitrix:catalog.section на вывод популярных товаров

Традиционно нам нужно передать в «Код раздела » символьный код раздела, для которого и будем отбирать нужные нам элементы, прописываем ={$_REQUEST[«SECTION_CODE"]}

Традиционный блок с настройкой «Шаблона ссылок »

Указываем в компоненте настройку отбора по фильтру, показ самых просматриваемых элементов.


И вот в нашей детальной карточке товара, для нашего раздела, показываются самые популярные товары.


Новая адаптивная постраничная навигация

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

Давайте посмотрим, где это настраивается:

В блоке настроек «Настройка постраничной навигации » необходимо выбрать шаблон с названием «ROUND »

Мы настроили страницы, но ничего не работает

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

Первый шаг - настройка инфоблока

В инфоблоке необходимо прописать, «URL страницы информационного блока » - указываем в поле наш каталог: #SITE_DIR#/shop-for-confectioner/

В поле «URL страницы раздела ЧПУ для раздела: #SITE_DIR#/shop-for-confectioner/#SECTION_CODE#/

В поле «URL страницы детального просмотра » прописываем, как будет строиться ЧПУ для детальной карточки товара: #SITE_DIR#/shop-for-confectioner/#SECTION_CODE#/#ELEMENT_CODE#/

Ошибки в формирование адресов в инфоблоке, очень часто не приводят к потере работоспособности страниц, и обычно все не обращают на них внимание. Это опасно!

Страницы у вас будут открываться и все будет работать. Но возникнут проблемы с поиском и открытием страниц выдачи в поиске. А вторым проблемным местом станет автоматика формирования файла sitemap.xml , что приведет к неправильному индексированию вашего сайта. Будьте внимательны, и проверяйте эти два места - в них сразу можно увидеть проблему. Не смотрите только на открытие страниц или детальной карточки.

Второй шаг - это создание двух правил обработки адресов

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

В следующей статье, я покажу как не делать этот шаг, и как продукт все сделает за вас. Но эта возможность появилась с релиза 15.5 - поэтому я опишу этот шаг здесь.

И так идем в раздел «Правила обработки »

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

Правило создания ЧПУ для разделов

В правиле нам потребуется прописать всего три строки.

Поле «Условие » - это и есть регулярное выражение, которое будет выводить наши разделы. Опустим в этой статье как пишется регулярное выражение, это тема скорей целой книги и разработчикам имеет смысл почитать об этом. Можно просто скопировать мое регулярное выражение: #^/shop-for-confectioner/([\w\d\-]+)(\\?(.*))?#

Поле «Файл » - указываем пусть к нашему файлу list.php , который отвечает за отображение наших разделов: /shop-for-confectioner/list.php

Поле «Правило » - нужно указать переменную, в которой передается символьный код раздела, мы в настройках выше использовали SECTION_CODE , соответственно его и прописываем: SECTION_CODE=$1

Правило создания ЧПУ для элементов

Аналогично правило будет содержать три строки, но немного сложнее:

Поле «Условие » расширяется добавлением кусочка отвечающего за элемент: #^/shop-for-confectioner/([\w\d\-]+)/([\w\d\-]+)(\\?(.*))?#

Поле «Файл » содержит путь к файлу, который отвечает за показ карточки товара, это наш файл detail.php : /shop-for-confectioner/detail.php

Поле «Правило » содержит две переменные, в которых передаются символьные кода, раздела и элемента: SECTION_CODE=$1&ELEMENT_CODE=$2

Настройки закончены, и если вы все сделали правильно, у вас все должно заработать!

Но мы не закончили с заданием, нам еще необходимо сделать хлебные крошки.

Настройка хлебных крошек

Компонент хлебных крошек у нас лежит в header.php шаблона нашего сайта. Настройка компонента очень простая:

На скриншот поместились все настройки компонента.

Основные настройки делаются в компонентах расположенных на трех наших страницах, которые мы создали ранее.

Давайте вспомним задачу:

  • Требуется вывести хлебные крошки в подразделах раздела, и в детальной карточке элемента, но не выводить в разделе.
Решение:

Соответственно нам нужно в файлах list.php и detail.php поставить соответствующие галочки.

Для файла list.php идем в компонент bitrix:catalog.section и ставим следующую галочку.

При переходе в разделы, в хлебные крошки попадет название соответствующего раздела.

Для файла detail.php идем в компонент bitrix:catalog.element и ставим следующие галочки.

При переходе к элементу в хлебные крошки попадет как название раздела, так и название элемента.

Давайте посмотрим, что у нас получилось:

Для главной страницы раздела index.php

Для страниц подразделов нашего раздела, файл list.php

Для страницы детальной карточки товара, файл detail.php

Запрет отображения хлебных крошек на главной странице раздела

Нужно вызвать на редактирование файл index.php и прописать в нем одну строку: $APPLICATION->SetPageProperty ("NOT_SHOW_NAV_CHAIN", «Y»);

Данная строчка запрещает выводить хлебные крошки.

На этом первая статья закончена. Мы разобрали, как собрать каталог на отдельных компонентах. В следующей статье мы поговорим о том, как сделать то же самое, но без последнего пункта, а именно написания правил обработки адресов и изучения регулярных выражений.

Пишите свои вопросы в комментариях, я с удовольствием на них отвечу.