- Крауд-ссылки - виды, способы размещения Обучающий курс для начинающих сотрудников компании Link-Stream
- Виды ссылок активная анкорная неактивная безанкорная ссылка, при нажатии на которую вы переходите на другой сайт ссылка, при нажатии на которую вы не переходите на другой сайт; ссылку нужно скопировать в строку браузера и только тогда вы попадаете на сайт ссылка, закрытая другой ссылкой или словом ссылка ничем не закрыта сверху посетите сайт https://links-stream.ru/ посетите сайт https://links-stream.ru/ посетите сайт Линк-Стрим посетите сайт https://links-stream.ru/
- Параметры ссылок nofollow dofollow noindex редирект передают «вес» от форума сайту нашего клиента не передают «вес» от форума сайту нашего клиента не попадают в индекс поисковых систем промежуточная страница, которая забирает «вес» себе span
- Что такое редирект и как его определить? пост со ссылкой на форуме промежуточная страница (редирект) сайт клиента Виды редиректа скрытый простой двойной тройной зашифрованный реферральный redirect redir go to forum/sitesite/forum
- Как разместить ссылку ссылка-картинка безанкорная ссылка через ahref безанкорная ссылка через url анкорная ссылка через url анкорная ссылка через ahref [url=https://odmdetka.ru/]детские товары[/url] <a href=«https://odmdetka.ru/»>детские товары</a> [url=https://odmdetka.ru/][/url] <a href=«https://odmdetka.ru/»></a> [url=URL СТРАНИЦЫ][img]URL КАРТИНКИ[/img][/url] <a href=«URL СТРАНИЦЫ» ><img src=«URL картинки» ></a>
- Как поставить ссылку через код сайта?
• находим любой пост любого пользователя с активной ссылкой на сайт
• наводим курсор на ссылку и нажимаем правой кнопкой, выбираем Посмотреть код
• копируем код ссылки, заменяем на свою ссылку и вставляем в свой комментарий - Как поставить ссылку на форуме, в котором отключены ВВ-коды?
• пробуем прокачать аккаунт
• отправляем сначала без ссылки, затем редактируем
• отправляем ссылку в подпись аккаунта - Модерация vs бан есть надежда нет надежды аккаунт сохраняется аккаунт блокируется сообщение может быть опубликовано сообщение может быть опубликовано ссылка может быть удалена ссылка чаще всего удаляется
- Словарь терминов
• Ссылка -
1) так мы называем комментарий с активной ссылкой на сайт клиента;
2) уникальный адрес страницы сайта, при нажатии на который происходит переход на эту страницу
• Активная ссылка - ссылка, при нажатии на которую происходит переход на сайт
• Неактивная ссылка - ссылка, при нажатии на которую переход на сайт не произойдет (необходимо сначала скопировать ссылку в адресную строку браузера)
• Анкорная ссылка - ссылка, адрес которой закрывает другое слово
• Безанкорная ссылка - ссылка, адрес которой сверху ничего не перекрывает
• Атрибут ссылки - это ее параметры для поисковых систем
• Сайт-донор - сайт, на котором вы ставите ссылку (форум, блог и т.д), который передает вес другим сайтам
• Сайт-акцептор - сайт вашего заказчика, который получает «вес» донора - Словарь терминов
• Внешние (исходящие) ссылки - ссылки на форумах, которые ведут на сайт нашего клиента
• Внутренние (входящие) ссылки - ссылки на сайте нашего клиента, которые ведут на любые другие сайты (или на другие страницы)
• Редирект - промежуточная страница между форумом и сайтом клиента
• ВВ-коды - коды, которые используются а форуме для установления правил разметки, включения ссылок, добавления картинок/аудио/видео и т.п.
• Ссылка-картинка - картинка, при нажатии на которую вы попадете на сайт клиента
• Модерация - рассмотрение администрацией сайта вашего сообщения и принятие решения, размещать его на форуме или нет
• Бан - блокирование доступа аккаунта к форуму по причине нарушения его правил (например, размещение рекламных комментариев)
Translate
Поиск по этому блогу
среда, 24 января 2018 г.
Виды крауд ссылок и способы размещения на форумах
среда, 11 октября 2017 г.
Как выйти из редактора VIM
Ответов масса, но мне подошел именно такой.
Привожу его сразу, чтобы вас не утомлять - последовательно нажимать ESC : w q Enter - выход с сохранением
В некоторых случаях срабатывает - ESC : x Enter
ESC : q! Enter — выход без сохранения
Для терпеливых, о простой работе с этим редактором и Node.js
Последовательность действий при создании, сохранении и запуска файла в node.js из командной строки Bash.
- Проверить что раскладка ENG
- В нужной папке нажимаем пр клавишей и “Открыть Bash здесь”
-
vim temp.js
(temp.js - название файла который будет создан в той папке где вы открыли Bash) - Для начала ввода нажимаем a и вводите код:
Например:
var a = 1; var b = 2; var sum = a + b; console.log(sum);
- Последовательно нажимаем ESC : w q Enter
- В консоле набираем
node temp.js
Ты не одинок!
В мае вопрос "Как выйти из vim?" отпраздновал свой юбилейный миллионный просмотр.
Чаще всего сложности с тем, чтобы покинуть Vim, возникают у фронт-енд разработчиков — то есть тех, которые преимущественно просматривают тэги JQuery, CSS и AngularJS. За ними следом идут разработчики на Microsoft (C# и SQL Server) и мобильные разработчики (Android и iOS). Они работают по большей части с интегрированными средами разработки (Visual Studio, Eclipse, Xcode и так далее), а не простыми текстовыми редакторами, поэтому неудивительно, что они более склонны угодить в Vim случайно, чем открыть его умышленно.
Разработчики, которые реже всего заходят в тупик, пишут на C, C++, Python и Ruby. Этот список, на мой взгляд, вполне закономерен: он представляет собой смесь низкоуровневых и скриптовых языков, которые обычно предполагают простой текстовый редактор без графической оболочки. Соответственно, у тех, кто работает с этими языками, достаточно опыта, чтобы выйти из Vim, не прибегая к помощи Google.
И еще раз :
ESC :wq Enter или ESC :x Enter — выход с сохранением
Да и приятности с плюшками - ниже шпаргалка для работы с vim
Файл настройки: ~/.vimrc Можно редактировать файлы через сеть, например :e://user@host/path/to/the/file.txt :Ex или :e ./ - файловый менеджер == Основы == hjkl перемещение в разные стороны i режим вставки I добавление в начало строки a режим добавления A добавление в конец строки o добавить строку сразу за текущей O добавить строку перед текущей R писать поверх имеющегося текста u, :u[ndo] отмена предыдущего действия (undo) CTR-R, :red[o] отмена отмены предыдущего действия (redo) dd вырезать (удалить) строку cc удалить и начать редактирование yy копировать строку p вставить из буфера обмена d удалить n+1 строку y скопировать n+1 строку ESC перейти в режим просмотра DEL удалить следующий символ : перейти на строку #n % перейти к парной скобке :e **/filename.c редактировать файл (с поиском по имени) :w [fname] записать изменения :wa сохранить изменения во всех файлах :q выйти из редактора :q! выйти из редактора, не сохраняя изменения :color выбор цветовой схемы. цветвые схемы: /usr/local/share/vim/vim72/colors/*.vim :pwd текущий каталог :cd [path] перейти в другой каталог :!команда выполнить команду - man, git, и так далее стрелочками веерх и вниз можно автодополнять команды и искать по истории CTR+p или CTR+n автоматическое дополнение текста (в режиме редактирования) CTR+r,=, вставить выражение, например 5*2 - 3 (в режиме редактирования) CTR+u, CTR+d Page Up / Page Down CTR+y, CTR+e Перемотка вверх/вниз без движения курсора == Подсветка синтаксиса == :syntax on включить подсветку :syntax off выключить подсветку (по умолчанию) == Перенос строк == :set wrap разрешить word wrap (по умолчанию) :set nowrap запретить word wrap == Печать == :ha[rdcopy] распечатать документ :set printoptions=duplex:off отключить двустороннюю печать == Сворачивание == zc свернуть блок zo развернуть блок zM закрыть все блоки zR открыть все блоки za инвертирование zf см :set foldmethod=manual :set foldenable включить свoрачивание :set foldmethod=syntax сворачивание на основе синтаксиса :set foldmethod=indent сворачивание на основе отступов :set foldmethod=manual выделяем участок с помощью v и говорим zf :set foldmethod=marker сворачивание на основе маркеров в тексте :set foldmarker=bigin,end задаем маркеры начала и конца блока == Маркеры == ma установить локальный маркер a mB установить глобальный маркер B `c перейти к локальному маркеру c `0 вернуться на позицию, на которой закончили работу при закрытии vim :marks просмотр маркеров set viminfo='1000,f1 маркеры пишутся в ~/.viminfo, восстанавливаясь при следующем запуске vim. маркер " хранит последнюю позицию курсора в файле == Сессии == mksession file.session сохранить текущую сессию source file.session восстановить ранее сохраненную сессию == Макросы == qa записать макрос с именем a q в режиме записи макроса: закончить запись @a выполнить макрос с именем a @@ повторить последний макрос == Регистры == "ayy скопировать строку в регистр a "bdd вырезать строку и поместить в регистр b "С2d вырезать три строки и дописать в конец регистра C :reg [name1][name2][...] просмотреть содержимое регистров == Выделение == v + hjkl выделение текста SHIFT + v выделить строку CTR + v выделение прямоугольника p вставить y копировать d удалить gu к нижнему регистру gU к верхнему регистру == Отступы == [#]> сдвинуть выделенное вправо [#]< сдвинуть выделенное влево [#]>> сдвинуть строку вправо [#]<< сдвинуть строку влево set tabstop=# для табуляции используется # пробелов set shiftwidth=# в командах отступа используется # пробелов set [no]expandtab заменять ли табуляцию на соответствующее число пробелов == Поиск и замена в файле == /Выражение поиск выражения в файле \cВыражение поиск без учета регистра n следующее совпадение N предыдущее совпадение :%s/foo/bar/gi замена строк, см http://eax.me/regular-expr/ == Поиск по всему проекту == :vimgrep /EXPR/ **/*.c поиск по регулярному выражению :copen показать все найденные места :close скрыть все найденные места :cn переход к следующему результату :cp переход к предыдущему результату == Нумерация строк == :set number включить нумерацию строк :set nonumber отключить нумерацию строк == Работа с вкладками (a.k.a табами) == :tabnew [fname] создать таб :tabs вывести список табов :tabn следующий таб :tabp предыдущий таб gt перейти на таб #n gt следующий таб gT предыдущий таб :tabm +1 переместить таб вперед на одну позицию :tabm -1 переместить таб назад на одну позицию :tabm 2 переместить таб на заданную позицию (нумерация начинается с нуля) == Работа с окнами == :split горизонтальное разбиение :vsplit вертикальное разбиение Ctr+W, затем с закрыть окно +- изменение высоты текущего окна <> изменение ширины текущего окна = установить равный размер окон hjkl или стрелочки перемещение между окнами == Проверка орфографии == mkdir -p ~/.vim/spell cd ~/.vim/spell wget http://ftp.vim.org/vim/runtime/spell/ru.koi8-r.sug wget http://ftp.vim.org/vim/runtime/spell/ru.koi8-r.spl wget http://ftp.vim.org/vim/runtime/spell/en.ascii.sug wget http://ftp.vim.org/vim/runtime/spell/en.ascii.spl :set spell spelllang=ru,en включить проверку орфографии :set nospell выключить проверку орфографии ]s следующее слово с ошибкой [s предыдущее слово с ошибкой z= замена слова на альтернативу из списка zg good word zw wrong word zG ignore word == Работа с кодировкой == e ++enc=<имя кодировки> Редактирование файла в ??? кодировке w ++enc=<имя кодировки> Сохранить файл в новой кодировке set fileencodings=utf-8,koi8-r Список автоматически определяемых кодировок в порядке убывания приоритета == Другое == :set [no]wildmenu При авто-дополнении в командной строке над ней выводятся возможные варианты :set list Отображать табуляцию и переводы строк q: История команд . Повторение последней команды
Данная информация была любезно предоставлена сайтом - "Записки программиста"
среда, 13 сентября 2017 г.
Создание сайта на PHP. Часть 1.
Схема работы сайта
Запос пользователя в адресной строке поступает в Front Controller где он обрабатывается с помощью роутера (маршрутизатора) в соответсвии с нашими маршрутами (роутами) прописанными в отдельном файле. Здесь же определяется какой контроллер и какой его метод (экшен) будет обрабатывать данный запрос. Уже назначенный контролер будет взаимодействовать с БД (базой данных) для получения необходимой информации и вызывать соответствующий файл представления (вид) для передачи пользователю запрашиваемой информации.
Для того, чтобы понять как это работает, лучше всего представить все в виде такой схемы:
Создаем файловую структуру сайта:
Папки:
- controller
- config
- components
- model
- views
Файлы:
- index.php
- .htaccess
Сразу приведу файл .htaccess полностью. Его нужно создать раньше, если вы работаете на OpenServer
DirectoryIndex index.php AddDefaultCharset utf-8 RewriteEngine on RewriteBase / RewriteRUle ^(.*)$ index.php
index.php
<?php // FRONT COTROLLER // 1. Общие настройки ini_set('display_errors', 1); error_reporting(E_ALL); // 2. Подключение файлов системы define('ROOT', dirname(__FILE__)); require_once(ROOT.'/components/Router.php'); // 3. Установка соединения с БД // 4. Вызов Router $router = new Router(); $router->run();
В общих настройках мы задали отображение ошибок. Это нужно нам. но не посетителям, поэтому при завершении работ с сайтом, отладке и размещении на хосте, эти строки нам нужно будет изменить. Эта информация может испугать законопослушных и неопытных посетителей сайта, или может быть использована злоумышленниками для взлома сайта.
Для подключения мы используем полный путь на диске, который мы получаем с помощью функции dirname()
и псевдо константы __FILE__
.
Для проверки содержимого константы ROOT(полный путь от корня файловой системы), мы можем вывести переменную ROOT следующим образом:
еcho ROOT;
Сразу после строк создания константы ROOT и подключения файла Router.php -
define('ROOT', dirname(__FILE__)); require_once(ROOT . '/components/Router.php'); еcho ROOT;
Соединения с БД на этом этапе мы выполнять не будем и вернемся к нему позже.
Вызов роутера можно добавить сейчас или сразу после описания нашего ротера я следующем шаге. Он будет заключаться в создании экземпляра класса Роутер - $router = new Router()
и запуске метода run() - $router->run();
;
Коль скоро мы подключили файл Router.php, то нам остается его создать в папке components
B нем пропишем следующий строки :<?php class Router { private $routes;//создаем массив в кот. хранятся наши маршруты public function __constructor(){ } public function run() { echo "It is file Roter.php";//Это для проверки подключения файла } }
Теперь, если мы откроем наш сайт, то увидим строки - It is file Roter.php -. Это говорит о том. что все подключено и правильно работает
Таким образом мы запустили наш Router и передали ему управление
Router
Первое с чего нам следует начать - маршруты (роуты). Они будут храниться в отдельном файле. Это очень удобно.
В папке config создадим для этого файл routes.php
Здесь мы и разместим наши роуты в виде массива:
routes.php
<?php return array( 'news' => 'news/index', // actionIndex in NewsController 'products' => 'product/list', // actionList in ProductController );
Роуты представляют собой пару в массиве.Запрос (то что пользователь набирает в адресной строке браузера) - Например: 'news'
и строка - 'news/index'
, которая содержит имя контроллера news
(первая часть), и имя экшена index
(функции обработчика запроса) - вторая часть.
Этот код - 'news' => 'news/index'
показывает, что будет вызван метод - actionIndex
в контроллере - NewsController
Здесь мы сами решаем, какой метод и какой контроллер будет обрабатывать наш запрос. Делаем это мы на этапе разработки нашего сайта.
Теперь наша задача заставить наш Router прочитать маршруты и помнить их на время выполнения кода.
Специально для этого мы создали переменную private $routes;
и конструктор public function __construct()
, в котором мы прочитаем и запомним роуты.
В конструкторе пишем две строки:
$routesPath = ROOT.'/config/routes.php'; $this->routes = include($routesPath);
В первой - $routesPath = ROOT.'/config/routes.php';
мы указываем путь к роутам. Она состоит из пути к базовой директории ROOT и пути к созданному файлу.
Во второй строке мы присваиваем свойству routes -$this->routes
массив, который хранится в файле routes.php
Теперь в наше свойство попадет нужный нам массив.
Для того чтобы проверить все ли у нас подключилось и правильно работает мы в методе run() сделаем распечатку массива :
print_r($this->routes);
Получим такое сообщение на сайте :
Array ( [news] => news/index [products] => product/list ) It is file Router.php
Все конечные версии вы можете посмотреть на Гугл Диске
Файл Router.php на данный момент полностью:
<?php class Router { private $routes; public function __construct() { $routesPath = ROOT.'/config/routes.php'; $this->routes = include($routesPath); } public function run() { print_r($this->routes); echo "It is file Router.php"; } }ЗАДАЧА 3
Теперь нам нужно реализовать метод run(). Это та часть, которая отвечает за анализ запроса и передачу управления
- Получение запроса
- Проверить наличие такого запроса в файле routes.php
- Если найдется совпадение. то определить какой контроллер и экшен будут обрабатывать это запрос
- Подключить файл, который содержит класс-контроллер
- Создать объект этого класса контроллер и вызвать нужный метод
Теперь по порядку:
Получение запроса
Файл Router.php на данный момент полностью:
<?php class Router { private $routes; public function __construct() { $routesPath = ROOT.'/config/routes.php'; $this->routes = include($routesPath); } public function run() { if (!empty($_SERVER['REQUEST_URI'])) { $uri = trim($_SERVER['REQUEST_URI'], '/'); } echo $uri; } }
Здесь мы из супер глобального массива $_SERVER
по ключу 'REQUEST_URI'
получаем нужную строке запроса
Теперь идем на наш сайт и в строке запроса дописываем /news/ - например. Или любое другое значение. Нажимаем Enter и видим значение из строки на нашем сайте.
Теперь, для того, чтобы сделать наш код понятнее и красивее, мы можем вынести этот код в отдельный метод - private function getURI()
,а вызов сделаем из функции run() таким образом - $uri = $this->getURI();
Файл Router.php на данный момент полностью:
<?php class Router { private $routes; public function __construct() { $routesPath = ROOT.'/config/routes.php'; $this->routes = include($routesPath); } //Returns request string private function getURI() { if (!empty($_SERVER['REQUEST_URI'])) { return trim($_SERVER['REQUEST_URI'], '/'); } } public function run() { $uri = $this->getURI(); echo $uri; } }
Метод getURI() мы сделали приватным, тем самым применили инкапсуляцию, потому как обращаться к этому методу мы планируем только из класса Роутер
Еще раз проверяем. Должно все работать точно так же как и в прошлый раз.
Проверить наличие такого запроса в файле routes.php
Теперь нам нужно найти такую строку запроса, которая содержится в переменной - $uri в наших маршрутах в файле -routes.php
Файл Router.php на данный момент полностью:foreach ($this->routes as $uriPattern => $path) { echo "
$uriPattern -> $path"; }
Файл Router.php на данный момент полностью:
<?php class Router { private $routes; public function __construct() { $routesPath = ROOT.'/config/routes.php'; $this->routes = include($routesPath); } //Returns request string private function getURI() { if (!empty($_SERVER['REQUEST_URI'])) { return trim($_SERVER['REQUEST_URI'], '/'); } } public function run() { $uri = $this->getURI(); foreach ($this->routes as $uriPattern => $path) { echo "
$uriPattern -> $path"; } } }
Здесь для каждого маршрута $this->routes
, который находится в нашем массиве,мы помещаем в переменную -$uriPattern
строку запросов из роутов файла- routes.php
(левая часть до => знака), а в переменную $path
- путь обработчика
Перезагружаем страницу и видим:
Теперь мы будем сравнивать строку запроса $uri с данными которые содержатся в роутах- $uriPattern
Это легко сделать используя функцию preg_match()
Для этого мы передаем в нее строку запроса - $uri и данные из наших роутов - $uriPattern
if(preg_match("~$uriPattern~", $uri)) { echo '+'; } }
Сохранили изменения в файле. Заходим на сайт, перезагружаем и получаем:
Причем, если теперь вы введете в строку запроса значение несоответствующее нашим роутам ('news' => 'news/index','products' => 'product/list' ), то ничего не увидите на сайте.
То есть, пока что наш роутер готов обработать два запроса - news и products по определенному правилу.
Обратите внимание, что в качестве разделителей в патерне"~$uriPattern~"
я использовал тильду, так как в нашем патерне могут содержаться слэши- '/' например при таком адресе страницы (' news/archive' => 'news/archive').
Файл Router.php на данный момент полностью:
<?php class Router { private $routes; public function __construct() { $routesPath = ROOT.'/config/routes.php'; $this->routes = include($routesPath); } //Returns request string private function getURI() { if (!empty($_SERVER['REQUEST_URI'])) { return trim($_SERVER['REQUEST_URI'], '/'); } } public function run() { $uri = $this->getURI(); foreach ($this->routes as $uriPattern => $path) { if(preg_match("~$uriPattern~", $uri)) { echo '+'; } } } }
Итак, если условие соблюдается. то в переменной $path будут находиться имя контроллера и экшена. Чтобы в этом убедиться вам нужно заменить + в выводе echo на переменную $path - вот так: echo $path;
Идем на страницу сайта, вводим запрос (существующий) и получаем:
Определяем какой контроллер и экшен обрабатывают запрос
Мы можем это получить с помощью функции - explode(), чтобы разделить строку на две части
Результат вы можете увидеть на скриншоте, а код файла Router.php ниже
Файл Router.php на данный момент полностью:
<?php class Router { private $routes; public function __construct() { $routesPath = ROOT.'/config/routes.php'; $this->routes = include($routesPath); } //Returns request string private function getURI() { if (!empty($_SERVER['REQUEST_URI'])) { return trim($_SERVER['REQUEST_URI'], '/'); } } public function run() { $uri = $this->getURI(); foreach ($this->routes as $uriPattern => $path) { if(preg_match("~$uriPattern~", $uri)) { $segments = explode('/', $path); echo ''; print_r ($segments); echo ''; } } } }
В результате мы получили два элемента, первый относящийся к контроллеру и второй к экшену
Теперь мы можем получить имя контроллера:
$controllerName = array_shift($segments).'Controller';
Здесь мы используем функцию array_shift()
, она получает первый элемент из массива $segments
и удаляет его. К этому значению мы добавляем слово 'Controller', поскольку мы приняли за систему такое именование конроллеров.
теперь нам остается сделать заглавной первую букву в названии контроллера функцией :
$controllerName = ucfirst($controllerName);
И теперь можно сохранить и проверить наш сайт.
Таким образом мы получили контроллер. Точно так же мы получаем и наш экшен, с той лишь разницей, что экшен имеет свой стиль наименований (с добавление вначале слова action, чтобы отличать их от других методов класса.
$actionName = 'action'.ucfirst((array_shift($segments)));
Файл Router.php на данный момент полностью:
<?php class Router { private $routes; public function __construct() { $routesPath = ROOT.'/config/routes.php'; $this->routes = include($routesPath); } //Returns request string private function getURI() { if (!empty($_SERVER['REQUEST_URI'])) { return trim($_SERVER['REQUEST_URI'], '/'); } } public function run() { $uri = $this->getURI(); foreach ($this->routes as $uriPattern => $path) { if(preg_match("~$uriPattern~", $uri)) { $segments = explode('/', $path); $controllerName = array_shift($segments).'Controller'; $controllerName = ucfirst($controllerName); $actionName = 'action'.ucfirst((array_shift($segments))); echo $controllerName.'
'.$actionName; } } } }
Да, кстати, теперь самое время добавить в папку controllers новые файлы ArticleController.php , NewsController.php и ProductController.php
Теперь нам сталось подключить нужный класс, создать его экземпляр и вызвать для определенного класса свой метод.
Вначале нам нужно создать наши контроллеры.
И вот теперь самое время добавить в папку controllers новые файлы ArticleController.php , NewsController.php и ProductController.php
Содержимое файлов NewsController.php и ProductController.php и ArticleController.php это соответствующий класс и один метод, который пустой и просто возвращает - true
NewsController.php
<?php class NewsController { public function actionIndex() { return true; } }
ProductController.php
<?php class ProductController { public function actionList() { return true; } }
ArticleController.php
&jt;?php class ArticleController { public function actionList() { return true; } }
Продолжаем работать над файлом Router.php и далее нам нужно подключить файл класса контроллера. Так как мы уже знаем его имя - $controllerName и используем определенный подход к названию фалов в папке контролеров, то сделать это очень просто вот таким кодом:
$controllerFile = ROOT . '/controllers/' .$controllerName. '.php'; if (file_exists($controllerFile)) { include_once($controllerFile); }
В этой части кода $controllerFile = ROOT . '/controllers/' .$controllerName. '.php';
мы определяем файл который необходимо подключить. Для этого мы прописываем путь к нему используя имя класса
Далее мы непосредственно подключаем его, предварительно проверяя существует ли он?
if (file_exists($controllerFile)) { include_once($controllerFile); }
Все необходимые действия в виде анализа запроса и подключения нужного файла мы выполнили
Создаем объект класса контрллера - $controllerObject = new $controllerName;. Вместо имени класса мы подставляем переменную, которая содержит строку с именем этого класса.
Далее для этого объекта $controllerObject мы вызываем метод $actionName(), точно так же мы используем переменную, которая содержит строку с названием нужного метода. В наших методах в файлах контолерах, мы писали return true для того, чтобы мы могли передать это значение определенной переменной - $result. В рузельтате, если метод сработал, то мы сможем об этом узнать и оборвать весь цикл - if ($result != null) {
break;
}
.
, который ищет совпадения в наших маршрутах.
$controllerObject = new $controllerName; $result = $controllerObject->$actionName(); if ($result != null) { break; }
Теперь наша система практически готова. Осталось добавить несколько штрихов в наши методы контроллеров и проверим ее на работоспособность. Например в NewsController.php (перед return true) - echo "NewsController.php actionIndex ";
Это позволило нам убедиться, что зaпущенн нужный нам метод. Точно тоже мы проделаем и с другим контроллером
Теперь если мы зайдем по другому адресу, мы получим уже совсем другой контроллер с новым экшеном. Если мы зайдем по адресу, которого нет в таблице наших маршрутов (роутах) то мы не получим ничего.
Все файлы проекта можно посмотреть на Гугл Диске
Далее Модель, Представление и усовершенствования класса Роутер
среда, 9 августа 2017 г.
Laravel Начало работы (1)
Установка фреймворка Laravel на OpenServer
Далее нам нужно перейти в диреторию domains.Для этого используем команду cd c:\OpenServer\domains (путь к папке - c:\OpenServer\domains - измените, если он у вас отличается).
Далее введите скопированную команду в КС. Можно изменить название конечной папки установки (blog) на любое другое.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=minilaravel
- здесь имя вашей Базы ДанныхDB_USERNAME=root
- ваше имя пользователяDB_PASSWORD=
- ваш пароль (если нет, то оставить пустое место)RewriteEngine on RewriteCond %{REQUEST_URI} !^public RewriteRule ^(.*)$ public/$l [L]
вторник, 8 августа 2017 г.
Создание Базы Данных на OpenServer
- Открываем КС - командную строку и переходим в директорию БД OpenServer
cd C:\OpenServer\modules\database\MariaDB-5.5\bin
Соединяемся с БД -mysql -u root
Получаем подтверждение об установленном соединении или повторяем все с начала. - Для просмотра уже существующих БД набираем
SHOW DATABASES;
- Для работы и перехода к существующей БД - набираем
use name_database;
name_database - имя уже существующей БД.ИЛИ создаем новую БД с помощью командыCREATE DATABASE name_database;
набираемuse name_database;
для работы с вновь созданной базой данных - Создаем таблицу в нашей БД, следующей командой:
CREATE TABLE `aliens_abduction` (
При наборе использовал Гравис - одинарная кавычка (буква Ё в англ раскладке)
`first_name` VARCHAR(30) ,
`last_name` VARCHAR(30) ,
`whеп_it_hаррепеd` varchar(30) ,
`hоw_lопg` VARCHAR(30) ,
`how_many` VARCHAR(30) ,
`alien_description` VARCHAR(lOO) ,
`what_they_did` VARCHAR(lOO) ,
`fang_spotted` VARCHAR(lO) ,
`other` VARCHAR(lOO) ,
`email` VАRСНАR(50)
) ;
- Для того, чтобы добавить данные в новую таблицу:
INSERT INTO alien_abduction (first_name, last_name, when_it_happened, how_long, how_many, alien_description, what_they_did, fang_spotted, other, email)
VALUES ('Салли', 'Джонс', '3 дня назад', '1 день' ,'четыре', 'зеленые с шестью щупальцами', 'мы просто разговаривали и играли с со6акой' , ' да', ' возможно, я видела вашу собаку, свяжитесь со мной','sally@mail.com'); - Для того, чтобы посмотреть все данные в таблице набираем:
SELECT * FROM aliens_abduction
Теперь нам осталось сделать так, чтобы данные в таблицу добавлялись автоматически рнр-сценарием
- На OpenServer в папке domains у нас есть папка с нашим сайтом mysite. Внутри нее есть два файла report.html и report.php.
report.html
<!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" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Aliens Abducted Me - Report an Abduction</title> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body> <h2>Aliens Abducted Me - Report an Abduction</h2> <p>Share your story of alien abduction:</p> <form method="post" action="report.php"> <label for="firstname">First name:</label> <input type="text" name="firstname" /><br /> <label for="lastname">Last name:</label> <input type="text" name="lastname" /><br /> <label for="email">What is your email address?</label> <input type="text" name="email" /><br /> <label for="whenithappened">When did it happen?</label> <input type="text" name="whenithappened" /><br /> <label for="howlong">How long were you gone?</label> <input type="text" name="howlong" /><br /> <label for="howmany">How many did you see?</label> <input type="text" name="howmany" /><br /> <label for="aliendescription">Describe them:</label> <input type="text" name="aliendescription" size="32" /><br /> <label for="whattheydid">What did they do to you?</label> <input type="text" name="whattheydid" size="32" /><br /> <label for="fangspotted">Have you seen my dog Fang?</label> Yes <input name="fangspotted" type="radio" value="yes" /> No <input name="fangspotted" type="radio" value="no" /><br /> <img src="fang.jpg" width="100" height="175" alt="My abducted dog Fang." /><br /> <label for="other">Anything else you want to add?</label> <textarea name="other"></textarea><br /> <input type="submit" value="Report Abduction" name="submit" /> </form> </body> </html>
report.php
<!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" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Aliens Abducted Me - Report an Abduction</title> </head> <body> <h2>Aliens Abducted Me - Report an Abduction</h2> <?php $first_name = $_POST['firstname']; $last_name = $_POST['lastname']; $when_it_happened = $_POST['whenithappened']; $how_long = $_POST['howlong']; $how_many = $_POST['howmany']; $alien_description = $_POST['aliendescription']; $what_they_did = $_POST['whattheydid']; $fang_spotted = $_POST['fangspotted']; $email = $_POST['email']; $other = $_POST['other']; $dbc = mysqli_connect('localhost', 'root', '', 'aliendatabase') or die('Error connecting to MySQL server.'); $query = "INSERT INTO alien_abduction (first_name, last_name, when_it_happened, how_long, " . "how_many, alien_description, what_they_did, fang_spotted, other, email) " . "VALUES ('$first_name', '$last_name', '$when_it_happened', '$how_long', '$how_many', " . "'$alien_description', '$what_they_did', '$fang_spotted', '$other', '$email')"; $result = mysqli_query($dbc, $query) or die('Error querying database.'); mysqli_close($dbc); echo 'Thanks for submitting the form.<br />'; echo 'You were abducted ' . $when_it_happened; echo ' and were gone for ' . $how_long . '<br />'; echo 'Number of aliens: ' . $how_many . '<br />'; echo 'Describe them: ' . $alien_description . '<br />'; echo 'The aliens did this: ' . $what_they_did . '<br />'; echo 'Was Fang there? ' . $fang_spotted . '<br />'; echo 'Other comments: ' . $other . '<br />'; echo 'Your email address is ' . $email; ?> </body> </html>
- Для соединения с уже созданной базой данных мы создали переменную с запросом:
$dbc = mysqli_connect('localhost', 'root', '', 'aliendatabase') or die('Error connecting to MySQL server.');
Первый параметр -localhost остается без изменений, затем идет имя пользователя (в моем случае - root), пароля нет - '' и имя БД - aliendatabase - В следующей перменной мы поместили все действия с данными (куда попадет тот или иной параметр введенный пользователем)
$query = "INSERT INTO alien_abduction (first_name, last_name, when_it_happened, how_long, " . "how_many, alien_description, what_they_did, fang_spotted, other, email) " . "VALUES ('$first_name', '$last_name', '$when_it_happened', '$how_long', '$how_many', " . "'$alien_description', '$what_they_did', '$fang_spotted', '$other', '$email')";
- Запрос к БД -
$result = mysqli_query($dbc, $query) or die('Error querying database.');
- РНР-функция
die ()
прерывает ход выполнения сценария и выводит сообщение о коде, который выполнить не удалось. Хотя это и не раскрывает всех причин неудачи в подробностях, функция die () все же сообщает нам: что-то случилось и необходимо принимать меры по решению проблемы. Если что-то не так с одним из четырех аргументов, необходимых для соединения функцииmysqli_connect ( )
, или сервер баз данных не может быть найден, функция die () останавливает ход выполнения сценария и выводит сообщение об ошибке, которое передается ей в качестве аргумента в скобках. - Функции
mysqli_query ()
необходимо передать в качестве аргумента SQL-запрос в виде РНР-строки (значения переменной $query), для того чтобы произвести добавление данных о похищении космическими пришельцами. - После всего закрываем БД -
mysqli_close($dbc);
среда, 31 мая 2017 г.
Добавление файлов в существующий репозиторий GitHub
git add .
git commit -m""
git status
git push shared master
git clone https://github.com/YaroslavW/templates.git
git push https://github.com/YaroslavW/templates.git master
Результат всех действий на фото ниже:
В итоге все мои файлы оказались в нужном репозитории.
Иногда, требуется ввести и такую последовательность (пример c сайта "Тостер")
git init git remote add origin https://github.com/splincode/unitrack.git git checkout -b master git clone https://github.com/splincode/unitrack.git git add . git config --global user.name 'splincode' git config --global user.email 'omaxphp@yandex.com' git config --global color.diff 'auto' git config --global color.status 'auto' git config --global color.branch 'auto' git commit -m "Комментарий для коммита" git push https://github.com/splincode/unitrack.git master
Если вы уже добавили сайт в репозиторий, но вспомнили, что забыли приложить к нему (скриншот например - site.jpg), то тогда последовательность действий следующая:
git add site.jpg
git commit -m'Your text for commit'
git push
Материалы по Git, которые могут быть вам интересны:
- "Git - добавление репозитория на GitHub"
- Git - работа с репо без пароля.
- Git - добавление репозитория на GitHub.
- Добавление файлов в существующий репозиторий GitHub.
- Git - Клонирование репозитория GitHub на компьютер.
Удачного кодирования!
вторник, 30 мая 2017 г.
Git - добавление репозитория на GitHub
- Переходим к папке проекта и нажимаем на нее правой кнопкой мыши. Вызываем Git Bash
- В нем делаем инициализацию репозитория -
git init
- Добавляем наш проект в этот репозиторий (пока что все в Git)
git add .
- Делаем первый коммит
git commit -m"Первый коммит"
- Смотрим статус нашего проекта
git status
- Теперь делаем изменения в нашем проекте. Например, мы добавим что-то в файл index.html
- Проверяем статус нашего проекта
git status
Видим, что изменения есть в файле index.html (отмечены красным). - Делаем добавление наших файлов
git add .
- Делаем второй коммит
git commit -m"Второй коммит"
- Проверяем статус проекта
git status
- показывает что все чисто - см фото ниже : - Теперь что -то удалим из файла и что-то добавим. Это важно сделать, для того, чтобы потом можно было увидеть разницу в изменениях (удаление, добавление), когда мы выложим проект на GitHub .
- Повторяем все снова -пункты 7, 8, 9.
- Теперь создаем пустой репозиторий на GitHub. Называем его - все равно как. Нас интересуют только две ссылки На фото ниже они отмечены красными стрелками. Они для каждого проекта свои и их нужно взять при создании репозитория.
- Добавляем их по очереди нажимая клавишу Enter
- Пришло время перейти в репозиторий и убедиться что все файлы добавлены. Там же мы можем увидеть и наши коммиты. Нажав на них мы сможем посмотреть, как изменялись наши файлы. Добавления - (+)выделены зеленым, а удаления красным (-)
Все изменения на панели - здесь :
Материалы по Git, которые могут быть вам интересны:
- "Git - добавление репозитория на GitHub"
- Git - работа с репо без пароля.
- Git - добавление репозитория на GitHub.
- Добавление файлов в существующий репозиторий GitHub.
- Git - Клонирование репозитория GitHub на компьютер.
Удачного кодирования!