Валерий, вопрос по работе с клиентами, заказчиками. Варианты проектов высылоть в виде архива им на почту? Сумеют ли на том конце посмотреть их?
Отредактировано sergdx27 (05-12-2017 07:29:36)
Вне форума
Серёжа приветствую,
ну.. ответ очевиден, конечно не смогут посмотреть. Надо разархивировать в папку, надо знать иерархию, знать про index.html.. Заказчики как правило далеки от этого всего.
Проекты выкладываются на реальный хостинг (тестовый), а клиентам-заказчикам дается адрес на конкретный проект (как правило на субдомене). Это очень удобно, т.к. клиент видит реал и может в пожеланиях дать свои "хотелки" по дизайну и т.д.
Очень удобно иметь свой выделенный арендованный сервер (dedicated server) или вообще свой (лучший вариант). Конечно это значительно дороже обычного хостинга, но через пару лет все разработчики приходят к этому решению. Можно использовать свой домашний сервер (со статическим адресом), правильно его сконфигурировав для доступа извне, и тоже давать заказчику адрес для реального просмотра. Это называется "домашний хостинг", и мы об этом будем говорить на ближайшем занятии.
До встречи в офисе.
Слишком умных жизнь сама чешет с двух боков: горе им и от ума, и от мудаков
Вне форума
Помните, что базовые принципы хорошего кода (написания) едины для программистов, пишущих на любом языке.
Соблюдайте единый Code style. Если программист приходит работать в организацию, особенно крупную, то чаще всего его знакомят с правилами оформления кода в конкретном проекте (соглашение по code style). Это не случайный каприз работодателя, а свидетельство серьёзного подхода.
Пример - соблюдайте переносы фигурных скобок и отступы - это значительно улучшает восприятие отдельных блоков кода, соблюдайте правило вертикали - части одного запроса или условия должны находиться на одном отступе -
if (typeof a ! == "undefined" &&
typeof b ! == "undefined" &&
typeof c === "string") {
//your stuff
}
Используйте осмысленные имена для переменных, функций, классов. Это обеспечит возможность поддержки проекта другими разработчиками.
Активно используйте комментарии, так будет легче разбираться в коде и самому и другим.
Плохой код -
<html>
<h1>Привет, мир!</h1>
<p>Это веб-страница.</p>
</html>
Хороший код -
<!DOCTYPE html>
<html>
/* Основной заголовок */
<head>
<title>Привет, мир</title>
</head>
<body>
<h1>Привет, мир!</h1>
<p>Это веб-страница.</p>
</body>
</html>
Посмотрите вебинар (Евгений Картавец) - https://geekbrains.ru/events/124 Много полезного!
Слишком умных жизнь сама чешет с двух боков: горе им и от ума, и от мудаков
Вне форума
Ещё пример хорошего тона в написании кода, всё ясно и понятно (т. н. "лесенка") -
Для повторения материала, небольшое домашнее задание - тестовый проект "Турбюро" перетащить в BootStrap и сделать его адаптивно-мобильным. Результат в архив и мне на почту.
Слишком умных жизнь сама чешет с двух боков: горе им и от ума, и от мудаков
Вне форума
Всем привет,
ну что-же.. С заданием все справились, на вопросы ответил индивидуально. Переходим к серъёзным вещам, а именно к языку PHP.
Сейчас вы плескаетесь в ванной, образно - в "джакузи".. Можете-умеете создавать коммерческие проекты реально за деньги.
Предлагаю окунуться дальше.., в озеро и реку, а через месяц - и в море.
Горизонты открываются, как и новые возможности, в том числе и денежные! Пройдем и этот интересный путь.
До встречи в офисе!
Слишком умных жизнь сама чешет с двух боков: горе им и от ума, и от мудаков
Вне форума
Друзья,
посмотрите пред-проект моей курсантки из Нижнекамска, мобильное исполнение -
http://faridaweb.ru
Она уже к марту откроет свою WEB студию. Потребуются верстальщик и художник-дизайнер (всё удаленно).
Слишком умных жизнь сама чешет с двух боков: горе им и от ума, и от мудаков
Вне форума
Всем привет,
прошу со всей внимательностью отнестись к первым четырем-пяти урокам с диска "Уроки PHP". От того, как вы внедритесь в новые понятия и логику языка, будет зависеть успех в освоении. Выполняйте примеры и на их основе пробуйте создать свои.
PHP это язык программирования, специально разработанный для написания web-приложений (сценариев), исполняющихся на веб-сервере.
Аббревиатура PHP означает “Hypertext Preprocessor (Препроцессор Гипертекста)". Синтаксис языка берет начало от C, Java и Perl. Преимуществом PHP является предоставление веб-разработчикам возможности быстрого создания динамически генерируемых web-страниц.
Создаем на локальном сервере "полигон" для изучения языка PHP (обычный каркас). Напоминаю путь -
файловая система-папка var/www/html/poligon. Не забываем дать этой папке права 777 (типичная ошибка начинающих!).
В папке создаем файл-заготовку (HTML), но !! Сохраняем его уже под именем index.php .
Завтра - внеплановые занятия в офисе, будет небольшой сюрприз.., до встречи!
Время утекает сквозь пальцы опущенных рук. В жизни всё воздается по заслугам. Хорошие получают хорошую работу, плохие получают спонсора, умные имеют своё дело, а самые разумные обладают всем.
Вне форума
Первый скрипт на PHP: hello.php
<html>
<head>
<title>Тестируем PHP</title>
</head>
<body>
<?
php echo '<p>Привет, мир!</p>';
?>
</body>
</html>
Обратите внимание на "экраны" PHP , для вставки кода в HTML.
Слишком умных жизнь сама чешет с двух боков: горе им и от ума, и от мудаков
Вне форума
Пример кода PHP+HTML . Предлагается разобрать блоками и построчно, что где вызывается, что где выводится и т.д. В понедельник (выходных вам будет достаточно) послушаю ваши комментарии.
<?php
if (!defined("IN_FUSION")) { die("Access Denied"); }
define("THEME_BULLET", "<img src='".THEME."images/cyber-bullet.png' class='no-border valignfix' alt='' />");
define("THEME_WIDTH", "90%");
define("CONTENT_WIDTH", "75%");
require_once INCLUDES."theme_functions_include.php";
require_once THEME."functions.php";
if (file_exists(THEME."locale/".$settings['locale'].".php")) { include THEME."locale/".$settings['locale'].".php";
} else { include THEME."locale/Russian.php"; }
if (function_exists("add_handler")) { add_handler("theme_output"); }
function render_page($license = false) {
global $settings, $main_style, $locale, $mysql_queries_time, $userdata;
//Header
echo "<div class='header-dots'>\n<div class='header-light'>\n";
echo "<div class='header-navigation'>".showsublinks(null)."</div>\n";
if (!preg_match("#administration/#si", START_PAGE)) {
echo "<div class='header-share'>\n<div class='addthis_toolbox addthis_floating_style addthis_32x32_style'>\n";
echo "<a class='addthis_button_preferred_1'></a>\n";
echo "<a class='addthis_button_preferred_2'></a>\n";
echo "<a class='addthis_button_preferred_3'></a>\n";
echo "<a class='addthis_button_preferred_4'></a>\n";
echo "<a class='addthis_button_compact'></a>\n";
echo "</div>\n";
echo "<script type='text/javascript' src='http://s7.addthis.com/js/250/addthis_widget.js#pubid=xa-501677ba436338d2'></script>\n";
echo "</div>\n";
}
echo "<table cellpadding='0' cellspacing='0' width='".THEME_WIDTH."' class='center'>\n<tr>\n";
echo "<td class='header-quick-search'>\n<form name='searchform' method='get' action='".BASEDIR."search.php'>\n";
echo "<input type='hidden' name='stype' value='all' />\n";
echo "<input type='text' name='stext' value='".$locale['ce_000']."' class='search-field' onclick=\"this.value='';\" />\n";
echo "<input type='submit' name='search' value='".$locale['ce_001']."' class='search-start' />\n";
echo "</form>\n</td>";
echo "<td class='header-login-bar'>\n";
if (iMEMBER) { echo "<a href='".BASEDIR."profile.php?lookup=".$userdata['user_id']."' class='register'>".$locale['ce_002']."</a>|<a href='".BASEDIR."edit_profile.php' class='register'>".$locale['ce_003']."</a>|<a href='".BASEDIR."index.php?logout=yes' class='login'>".$locale['ce_004']."</a>\n";
} else { echo "<a href='".BASEDIR."register.php' class='register'>".$locale['ce_005']."</a>|<a href='".BASEDIR."login.php' class='login'>".$locale['ce_006']."</a>\n"; }
echo "</td>";
echo "</tr>\n<tr>\n";
echo "<td class='full-header'>\n".showbanners()."</td>\n";
echo "<td class='header-weekly-news'></td>\n";
echo "</tr>\n</table>\n";
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Slider</title>
<script type="text/javascript">
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="themes/Acb-pro/slider/js/jquery.waterwheelCarousel.js"></script>
<script type="text/javascript">
$(document).ready(function () {
var carousel = $("#carousel").waterwheelCarousel({
flankingItems: 3,
movingToCenter: function ($item) {
$('#callback-output').prepend('movingToCenter: ' + $item.attr('id') + '<br/>');
},
movedToCenter: function ($item) {
$('#callback-output').prepend('movedToCenter: ' + $item.attr('id') + '<br/>');
},
movingFromCenter: function ($item) {
$('#callback-output').prepend('movingFromCenter: ' + $item.attr('id') + '<br/>');
},
movedFromCenter: function ($item) {
$('#callback-output').prepend('movedFromCenter: ' + $item.attr('id') + '<br/>');
},
clickedCenter: function ($item) {
$('#callback-output').prepend('clickedCenter: ' + $item.attr('id') + '<br/>');
}
});
$('#prev').bind('click', function () {
carousel.prev();
return false
});
$('#next').bind('click', function () {
carousel.next();
return false;
});
$('#reload').bind('click', function () {
newOptions = eval("(" + $('#newoptions').val() + ")");
carousel.reload(newOptions);
return false;
});
});
</script>
<style type="text/css">
body {
font-family:Arial;
font-size:12px;
background:#ededed;
}
.example-desc {
margin:3px 0;
padding:5px;
}
#carousel {
width:860px;
margin: 10px auto;
border:0px solid #222;
height:300px;
position:relative;
clear:both;
overflow:hidden;
background:transparent;
}
#carousel img {
visibility:hidden; /* hide images until carousel can handle them */
cursor:pointer; /* otherwise it's not as obvious items can be clicked */
}
.split-left {
width:450px;
float:left;
}
.split-right {
width:400px;
float:left;
margin-left:10px;
}
#callback-output {
height:300px;
overflow:scroll;
}
textarea#newoptions {
width:430px;
}
.nav {
width: 80px; margin: 20px auto
}
</style>
</head>
<body>
<div id="carousel">
<a href="https://vk.com/club114907214" target='_blank'><img src="themes/Acb-pro/slider/images/1.jpg" id="item-1" /></a>
<a href="https://vk.com/club114907214" target='_blank'><img src="themes/Acb-pro/slider/images/2.jpg" id="item-2" /></a>
<a href="https://vk.com/club114907214" target='_blank'><img src="themes/Acb-pro/slider/images/3.jpg" id="item-3" /></a>
<a href="https://vk.com/club114907214" target='_blank' ><img src="themes/Acb-pro/slider/images/4.jpg" id="item-4" /></a>
<a href="https://vk.com/club114907214" target='_blank'><img src="themes/Acb-pro/slider/images/5.jpg" id="item-5" /></a>
<a href="https://vk.com/club114907214" target='_blank'><img src="themes/Acb-pro/slider/images/6.jpg" id="item-6" /></a>
<a href="https://vk.com/club114907214" target='_blank'><img src="themes/Acb-pro/slider/images/7.jpg" id="item-7" /></a>
<a href="https://vk.com/club114907214" target='_blank'><img src="themes/Acb-pro/slider/images/8.jpg" id="item-8" /></a>
<a href="https://vk.com/club114907214" target='_blank'><img src="themes/Acb-pro/slider/images/9.jpg" id="item-9" /></a>
</div>
<p><center><a href="https://vk.com/club114907214" target='_blank'><b>Мы ВКонтакте</b></a></center></p>
</body>
</html>
<?php
//Content
echo "<table cellpadding='0' cellspacing='0' width='".CONTENT_WIDTH."' class='content-table'>\n<tr>\n";
echo "<td class='content-corner top-left'></td>\n";
echo "<td class='content-horiontal top' colspan='2'></td>\n";
echo "<td class='content-corner top-right'></td>\n";
echo "</tr>\n<tr>\n";
echo "<td class='content-vertical left'></td>\n";
if (preg_match("#administration/#si", START_PAGE)) { echo "<td class='content-mid admin-panels'>".(LEFT ? LEFT : "").(RIGHT ? RIGHT : "")."</td>\n"; }
echo "<td class='content-mid'>".U_CENTER.CONTENT.L_CENTER."</td>\n";
if (preg_match("#forum/#si", START_PAGE)) { echo "<td class='content-mid no-panels'></td>\n";
} elseif (!preg_match("#administration/#si", START_PAGE)) { echo "<td class='content-mid panels'>".(LEFT ? LEFT : "").(RIGHT ? RIGHT : "")."</td>\n"; }
echo "<td class='content-vertical right'></td>\n";
echo "</tr>\n<tr>\n";
echo "<td class='content-corner bottom-left'></td>\n";
echo "<td class='content-horiontal bottom' colspan='2'></td>\n";
echo "<td class='content-corner bottom-right'></td>\n";
echo "</tr>\n</table>\n";
//Footer
echo "<table cellpadding='0' cellspacing='0' width='100%' class='footer-table'>\n<tr>\n";
echo "<td class='footer-designer'><div class='ghost'>CyberEye theme by FDTD Designer</div></td>\n";
echo "<td class='footer-info'>\n<div class='float-right'>\n";
echo (!empty($settings['footer']) ? stripslashes($settings['footer'])."" : "").(!$license ? showcopyright() : "");
echo "</div>\n</td>";
echo "</tr>\n</table>\n";
echo "<table cellpadding='0' cellspacing='0' width='100%' class='footer-subtable'>\n<tr>\n";
echo "<td class='footer-hotline' colspan='2'>\n";
echo "<div class='float-right'>".showcounter()."</div>\n";
echo showrendertime();
echo "</td>";
echo "</tr>\n</table>\n";
echo "</div>\n</div>\n";
}
function render_comments($c_data, $c_info){
global $locale, $settings;
opentable($locale['c100']);
if (!empty($c_data)){
$c_makepagenav = "";
if ($c_info['c_makepagenav'] !== false) { echo $c_makepagenav = "<div style='text-align:center;margin-bottom:5px;'>".$c_info['c_makepagenav']."</div>\n"; }
foreach($c_data as $data) {
$profile_link = preg_replace("#<a href='(.*?)'.*?>.*?</a>#si", "\\1", $data['comment_name']);
echo "<div class='comment-box wrapper'>\n";
if ($settings['comments_avatar'] == "1") { echo "<div class='float-left comment-avatar-box'><div class='comment-avatar'>".$data['user_avatar']."</div></div>\n"; }
echo "<div class='float-left comment-arrow'></div>\n";
echo "<div class='floatfix'>\n<div class='comment-info'>\n";
echo "<div class='float-right'><a href='".FUSION_REQUEST."#c".$data['comment_id']."' id='c".$data['comment_id']."' name='c".$data['comment_id']."'>#".$data['i']."</a></div>\n";
echo "Написал(а) ".$data['comment_name']." ".$data['comment_datestamp']."</div>\n<div class='comment-message'>\n";
if ($data['edit_dell'] !== false) {
$manage_links = str_replace(" |", "", $data['edit_dell']);
$manage_links = preg_replace("#<a href='(.*?)'>(.*?)</a>#si", "<span rel='comment-option edit' name='\\2'>\\1</span>", $manage_links, 1);
$manage_links = preg_replace("#<a href='(.*?)'>(.*?)</a>#si", "<span rel='comment-option delete' name='\\2'>\\1</span>", $manage_links, 1);
$manage_links = preg_replace("#<span rel='(.*?)' name='(.*?)'>(.*?)</span>#si", "<a href='\\3' class='\\1' title='\\2'><img src='".THEME."images/spacer.png' class='no-border comment-spacer' alt='' /></a>", $manage_links);
echo "<div class='float-right'>".$manage_links."\n</div>\n";
}
echo $data['comment_message'];
echo "</div>\n</div>\n</div>\n";
}
echo $c_makepagenav;
if ($c_info['admin_link'] !== false) { echo "<div class='comment-break float-right'>".$c_info['admin_link']."</div>\n"; }
} else {
echo $locale['c101']."\n";
}
closetable();
}
function render_news($subject, $news, $info) {
global $locale, $settings, $aidlink;
echo "<table cellpadding='0' cellspacing='0' class='material-table'>\n<tr>\n";
echo "<td class='material-icon'>".$info['cat_image']."</td>\n";
echo "<td class='material-subject'>\n<div class='float-right'>\n";
if (iADMIN && checkrights("N")) { echo "<a href='".ADMIN."news.php".$aidlink."&action=edit&news_id=".$info['news_id']."'><img src='".get_image("edit")."' alt='".$locale['global_076']."' title='".$locale['global_076']."' /></a>\n"; }
echo "<a href='".BASEDIR."print.php?type=N&item_id=".$info['news_id']."'><img src='".get_image("printer")."' alt='".$locale['global_075']."' title='".$locale['global_075']."' /></a>";
echo "</div>\n";
if ($info['news_sticky'] == "1") { echo "<img src='".THEME."images/material-sticky.png' class='no-border valignfix sticky' alt='' />"; }
echo "<a id='news_".$info['news_id']."' name='news_".$info['news_id']."' href='".BASEDIR."news.php?readmore=".$info['news_id']."'>".strip_tags($subject)."</a>\n";
echo "</td>\n";
echo "</tr>\n<tr>\n";
echo "<td class='material-icon date' rowspan='2'>\n";
echo "<div class='material-date'><span>".showdate("%d", $info['news_date'])."</span><br />".showdate("%m.%y", $info['news_date'])."</div>\n";
echo "</td>\n";
echo "<td class='material-info'>\n<ul>\n";
echo "<li class='user'>".profile_link($info['user_id'], $info['user_name'], $info['user_status'])."</li>\n";
echo "<li class='category'><a href='".BASEDIR."news_cats.php?cat_id=".$info['cat_id']."'>".$info['cat_name']."</a></li>\n";
echo "<li class='views'>".$info['news_reads'].$locale['global_074']."</li>\n";
if ($info['news_allow_comments'] && $settings['comments_enabled'] == "1") {
echo "<li class='comments'><a href='".BASEDIR."news.php?readmore=".$info['news_id']."#comments'>".$info['news_comments'].($info['news_comments'] == 1 ? $locale['global_073b'] : $locale['global_073'])."</a></li>\n";
}
echo "</ul>\n</td>\n";
echo "</tr>\n<tr>\n";
echo "<td class='material-body'>".$news."<br />\n";
if (!isset($_GET['readmore']) && $info['news_ext'] == "y") {
echo "<br />\n<div class='float-right'><a href='".BASEDIR."news.php?readmore=".$info['news_id']."' class='button'><span class='rightarrow icon'></span>".$locale['global_072']."</a></div>\n";
}
echo "</td>\n";
echo "</tr>\n</table>\n";
}
function render_article($subject, $article, $info) {
global $locale, $settings, $aidlink;
echo "<table cellpadding='0' cellspacing='0' class='material-table'>\n<tr>\n";
echo "<td class='material-icon'><img src='".THEME."images/article-head.png' class='no-border valignfix' alt='' /></td>\n";
echo "<td class='material-subject'>\n<div class='float-right'>\n";
if (iADMIN && checkrights("A")) { echo "<a href='".ADMIN."articles.php".$aidlink."&action=edit&article_id=".$info['article_id']."'><img src='".get_image("edit")."' alt='".$locale['global_076']."' title='".$locale['global_076']."' /></a>\n"; }
echo "<a href='".BASEDIR."print.php?type=A&item_id=".$info['article_id']."'><img src='".get_image("printer")."' alt='".$locale['global_075']."' title='".$locale['global_075']."' /></a>";
echo "</div>\n";
echo "<a id='article_".$info['article_id']."' name='article_".$info['article_id']."' href='".BASEDIR."articles.php?article_id=".$info['article_id']."'>".strip_tags($subject)."</a>\n";
echo "</td>\n";
echo "</tr>\n<tr>\n";
echo "<td class='material-icon date' rowspan='2'>\n";
echo "<div class='material-date'><span>".showdate("%d", $info['article_date'])."</span><br />".showdate("%m.%y", $info['article_date'])."</td>\n";
echo "</td>\n";
echo "<td class='material-info'>\n<ul>\n";
echo "<li class='user'>".profile_link($info['user_id'], $info['user_name'], $info['user_status'])."</li>\n";
echo "<li class='category'>".($info['cat_id'] ? "<a href='".BASEDIR."articles.php?cat_id=".$info['cat_id']."'>".$info['cat_name']."</a>" : "<a href='".BASEDIR."articles.php?cat_id=0'>".$locale['global_080']."</a>")."</li>\n";
echo "<li class='views'>".$info['article_reads'].$locale['global_074']."</li>\n";
if ($info['article_allow_comments'] && $settings['comments_enabled'] == "1") {
echo "<li class='comments'><a href='".BASEDIR."articles.php?article_id=".$info['article_id']."#comments'>".$info['article_comments'].($info['article_comments'] == 1 ? $locale['global_073b'] : $locale['global_073'])."</a></li>\n";
}
echo "</ul>\n</td>\n";
echo "</tr>\n<tr>\n";
echo "<td class='material-body'>".($info['article_breaks'] == "y" ? nl2br($article) : $article)."</td>\n";
echo "</tr>\n</table>\n";
}
function opentable($title) {
echo "<table cellpadding='0' cellspacing='0' class='material-table'>\n<tr>\n";
echo "<td class='material-icon'><img src='".THEME."images/block-head.png' class='no-border valignfix' alt='' /></td>\n";
echo "<td class='material-subject'>".$title."</td>\n";
echo "</tr>\n<tr>\n";
echo "<td class='material-body' colspan='2'>\n";
}
function closetable() {
echo "</td>\n";
echo "</tr>\n</table>\n";
}
function openside($title, $collapse = true, $state = "on") {
global $panel_collapse, $panel_switcher; $panel_collapse = $collapse;
if ($panel_collapse == true) {
$boxname = str_replace(" ", "", $title);
$panel_switcher = panelbutton($state, $boxname);
}
echo "<table cellpadding='0' cellspacing='0' class='panel-table'>\n<tr>\n";
echo "<td class='panel-corner top-left'></td>\n";
echo "<td class='panel-horiontal top' colspan='2'></td>\n";
echo "<td class='panel-corner top-right'></td>\n";
echo "</tr>\n<tr>\n";
echo "<td class='panel-vertical left'></td>\n";
echo "<td class='panel-mid'>\n";
echo "<div class='title'>".$title."</div>\n";
if ($collapse == true) { echo panelstate($state, $boxname); }
}
function closeside() {
global $panel_collapse, $panel_switcher;
if ($panel_collapse == true) { echo "</div>\n"; }
echo "</td>\n";
echo "<td class='panel-mid collapse'>".($panel_collapse == true ? $panel_switcher : "")."</td>\n";
echo "<td class='panel-vertical right'></td>\n";
echo "</tr>\n<tr>\n";
echo "<td class='panel-corner bottom-left'></td>\n";
echo "<td class='panel-horiontal bottom' colspan='2'></td>\n";
echo "<td class='panel-corner bottom-right'></td>\n";
echo "</tr>\n</table>\n";
}
?>
До встречи в офисе!
Слишком умных жизнь сама чешет с двух боков: горе им и от ума, и от мудаков
Вне форума
Отвечу на письма по Новогодним каникулам. Как вы знаете, некоторые ребята-курсанты приехали на курсы с других городов и уже купили билеты для встречи Новогоднего праздника дома, с родными. Поэтому каникулы объявляются с 28 декабря (у Влада чуть раньше) по 5 января. Попрошу выполнить все дом. задания и не опаздывать к продолжению очных занятий.
С наступающим!
Слишком умных жизнь сама чешет с двух боков: горе им и от ума, и от мудаков
Вне форума
[ Сгенерировано за 0.022 сек, 8 запросов выполнено - Использовано памяти: 728.72 Кбайт (Пик: 1.04 Мбайт) ]