[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Оцените проект
Страницы: 1, 2, 3, 4, 5, 6
Michael
Цитата (paul85)
Я не думаю, что типовые движки прямо могут со всеми банками взаимодействовать.

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

_____________
There never was a struggle in the soul of a good man that was not hard
paul85
Цитата
Мне лично понравилось, что фамилия - необязательное поле, а отчество - обязательное rolleyes.gif

Ну это же заказ без регистрации. То есть обратиться к человеку по имени и отчеству, когда менеджер будет звонить. А фамилия ИМХО в данном случае вроде как и лишняя. Поэтому такие обязательные поля.

Цитата
Это страница товара. Почему титл = "Каталог"? Где h1? Метатеги? Почему во всем каталоге всегда титл = "Каталог"? и т.д.

Спасибо, учту! Я с сео почти не знаком, увы...

Цитата
Есть глюки и непонятки в логике. Например, удаление позиций в корзине.

А чего там за глюк с корзиной?

Цитата
Правильный путь ценообразования: ТЗ - бюджет заказчика - поиск решения - реализация

Дело в том, что заказчик не всегда готов озвучивать свой бюджет. Как быть в этом случае?

Цитата
А с какого отправного момента он (заказчик) стал апеллировать к другим движкам?

Когда речь пошла об интеграции платежной системы банка. Не то, чтобы претензии, скажем так, намек. Мол, "я конечно понимаю всё... Но вот тут я видел то-то и то-то..." И вроде как справедливо, но обидно другое. Вот он сейчас смотрит на все эти громкие фразы, и может быть чуть-чуть не понимает, что за базовую стоимость он получит магазин довольно далекий от его мечты.

Тут случай забавный был, как раскрутили ребят из 1cteam.ru на 70 кусков. Вот за это! Тоже обещали все на свете, чуть ли не научные исследования провести. =)
paul85
Цитата
Недавно Вы писали про тесты для нанимателя. Если это делали Вы, то свои тесты Вы бы не прошли.

S.Chushkin, ну как, я про верстку вроде ничего и не говорил. Однако вполне вероятно, что свой же тест и не прошел бы.

Признаюсь, сверстан сайт без ухищрений. Но я так глянул более или менее вроде работает под разными браузерами. Вроде даже одинаково отображает.
S.Chushkin
Цитата (paul85 @ 26.12.2013 - 19:01)
ну как, я про верстку вроде ничего и не говорил.

Вёрстка это тоже показатель качества и влияет на цену.

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

Вёрстка это не только отображение, но и HTML-код. Ваш HTML-код недостаточно качественен для спеца на 100 Кр, соответственно можно предположить, что PHP-код также недостаточно качественен для спеца указанного уровня. Т.е. или нужно уменьшать цену спеца и увеличивать сроки, чтобы уложиться в озвученную цену проекта (см.выше) или нанимать другого. Кроме того, плохое качество кода порождает сомнения в других параметрах проекта, например безопасности. Поэтому я и сказал, что нужно ещё пару недель, чтобы вылизать код, и HTML и PHP.
В общем, качество кода это один из показателей насколько тщательно разраб выполняет работу, что может/должно влиять на цену проекта.

Цитата
А чего там за глюк с корзиной?

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

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
S.Chushkin
Цитата (MiksIr @ 26.12.2013 - 20:14)
Тогда достаточно одного поля: "Как вас зовут" или "Как к вам обращаться" - и все.

Причём поле не должно быть обязательным. Покупатель не обязан называть продавцу своё имя.

_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
paul85
Цитата
Ещё не хорошо, когда добавляется товар с длинным описанием - кнопки "уезжают" за границы.

Исправлю. Не заметил, благодарю!
Цитата
Вообще, нафига нужно это промежуточное действие, непонятно - нормально сразу добавлять товар в корзину

Изначально так и было сделано. Но позже заказчик настоятельно пожелал "менять количество товара сразу же" + сообщение о добавлении (подразумевается какая-то реакция на кнопку "купить").

Цитата
Когда удаляешь товар из корзины она должна пересчитываться и перерисовываться сразу, а не ждать нажатие кнопки

Хм, а что за браузер? Там улетает через AJAX id товара и по success: window.location.reload() То есть перезагрузка не срабатывает, я правильно понимаю?

Цитата
Тогда достаточно одного поля: "Как вас зовут" или "Как к вам обращаться" - и все.

Предложу такой вариант, а решает пусть заказчик.
S.Chushkin
Цитата (paul85 @ 26.12.2013 - 20:50)
Изначально так и было сделано. Но позже заказчик настоятельно пожелал "менять количество товара сразу же" + сообщение о добавлении (подразумевается какая-то реакция на кнопку "купить").

Тут ничего не поделаешь - "хозяин барин...".

Цитата
Хм, а что за браузер?

Опера, последняя.


_____________
Рекламка / ad.pesow.com Хрень / mr-1.ru
paul85
Цитата
PHP-код также недостаточно качественен для спеца указанного уровня.

Даже любопытно стало! Выложу на оценку пару кусочков.

Свернутый текст
<?php

class
Core extends Config
{
protected $template;
protected $discount=0;


public function __construct()
{
$this->smarty = new Smarty();
$this->smarty->template_dir = $_SERVER['DOCUMENT_ROOT'] . '/tmpl/templates';
$this->smarty->compile_dir = $_SERVER['DOCUMENT_ROOT'] . '/tmpl/templates_c';
$this->db = new goDB($this->config);
$this->db->query("SET NAMES utf8");
if(isset($_COOKIE['SESSID']))
{
session_start();
if(isset($_SESSION['LOGIN']))
{
$this->smarty->assign('user_login', $_SESSION['LOGIN']);
$this->discount = $_SESSION['DISCOUNT'];
}
}
}


protected function cartinfo()
{
$pattern = 'SELECT
temp1.temporderdetail_quantity * CEIL(temp2.product_price -(temp2.product_price/100*'
.$this->discount.')) as subtotal,
temp1.temporderdetail_quantity as quantity
FROM
temporderdetail as temp1
LEFT JOIN
product as temp2
ON
temp2.product_id = temp1.product_id
WHERE
temp1.temporderdetail_sesid=?'
;

$data = array(session_id());
$table = $this->db->query($pattern, $data, 'assoc');


if(!empty($table))
{
$sumprod=0;
$quant=0;

$this->smarty->assign('session', true);
$_SESSION['cart'] = true;
foreach($table as $row)
{
$sumprod += $row['subtotal'];
$quant += $row['quantity'];

}
$sumprod = number_format($sumprod, 0, '', ', ');
$this->smarty->assign('numberofproducts', $quant);
$this->smarty->assign('sumoforder', $sumprod);
}
else
{
$_SESSION['cart'] = false;
}
}


private function _shownews()
{
$news = $this->db->query('SELECT
news_id,
DATE_FORMAT(news_date, "%d-%m-%Y") as news_date,
news_header
FROM
news
ORDER BY
news_date DESC LIMIT 10 '
, array(), 'assoc');
$this->smarty->assign('news', $news);

}

protected function _paginator($sql, $sqldata, $pagetodisplay, $rowonpage)
{
$countofrows = $this->db->query($sql, $sqldata, 'num');
$totalpages = ceil($countofrows/$rowonpage); //Общее коичество страниц в результате запроса

if($countofrows <= $rowonpage) //Если менее одной страницы
$pageline = NULL;
elseif($totalpages < $pagetodisplay) //Если запрошенная страница больше, чем можно отобразить.
$pageline = FALSE;
else
{
$start = ($pagetodisplay-1)*$rowonpage;
$sql .= " LIMIT $start, $rowonpage";

if($totalpages <= 9)
{
for($i=1; $i<=$totalpages; $i++)
{
if($pagetodisplay == $i)
$pageline[]=$i*(-1);
else
$pageline[]=$i;
}
}

elseif($pagetodisplay > 5 && $pagetodisplay <= $totalpages-5)
{
$pageline=array(1,0);
for($i=$pagetodisplay-3; $i<=$pagetodisplay+3; $i++)
{
if($pagetodisplay == $i)
$pageline[]=$i*(-1);
else
$pageline[]=$i;
}
$pageline[]=0;
$pageline[]=$totalpages;
}
elseif($pagetodisplay <= 5 && $totalpages > 9)
{
for($i=1; $i<=7; $i++)
{
if($pagetodisplay == $i)
$pageline[]=$i*(-1);
else
$pageline[]=$i;
}
$pageline[]=0;
$pageline[]=$totalpages;
}
elseif($pagetodisplay > 5 && $pagetodisplay > $totalpages-5)
{
$pageline=array(1,0);
for($i=$totalpages-6; $i<=$totalpages; $i++)
{
if($pagetodisplay == $i)
$pageline[]=$i*(-1);
else
$pageline[]=$i;
}
}

}

return(array('sql' => $sql, 'pageline' => $pageline));
}

public function __destruct()
{
if(!empty($_SESSION['cart']) && !isset($_SESSION['admin']))
$this->cartinfo(); //отображаем содержимое корзины
$this->_shownews(); //показать новости
if($this->template)
$this->smarty->display($this->template);
else
$this->smarty->display('error/error_pagenotfound.tpl');
}
}

?>

Свернутый текст

<?php
class
search extends Core
{
public function show()
{
$pattern='SELECT
temp1.product_id,
temp1.product_partnumber,
temp1.product_description,
CEIL(temp1.product_price - (temp1.product_price/100*'
. $this->discount . ')) AS product_price,
temp2.photo_id
FROM
product AS temp1
LEFT JOIN
photo AS temp2
ON
temp1.product_id = temp2.product_id
WHERE
product_description LIKE CONCAT("%", ?, "%") OR
product_partnumber LIKE CONCAT("%", ?, "%")'
;

if(!isset($_GET['partnumber']))
{
$_GET['partnumber']='';
}

$patterndata = array($_GET['partnumber'], $_GET['partnumber']);

if(isset($_GET['page']) && (int)$_GET['page'] > 0) //нормальный номер страницы
{
$page=(int)$_GET['page'];
$new_pattern = $this->_paginator($pattern, $patterndata, $page, 10);
if($new_pattern['pageline'] === FALSE || $new_pattern['pageline'] === NULL) //нет такой страницы. Или одна страница
{
header("HTTP/1.0 404 Not Found");
$this->template='error/error_pagenotfound.tpl';
exit();
}

}

elseif(isset($_GET['page']) && (int)$_GET['page']<=0) //подсунули бяку
{
header("HTTP/1.0 404 Not Found");
$this->template='error/error_pagenotfound.tpl';
exit();
}
else
{
$new_pattern = $this->_paginator($pattern, $patterndata, 1, 10);
}

$data = $this->db->query($new_pattern['sql'], $patterndata, 'assoc');
$this->smarty->assign('request', $_GET['partnumber']);
$this->smarty->assign('pagebar', $new_pattern['pageline']);
$this->smarty->assign('data', $data);
$this->template='blocks/blocks_search.tpl';
}

}

?>



Знаю, запросам в контроллере не место. Но движок старый, еще не переделал. Следующий проект уже идет на полноценном MVC. И сорри за алиасы temp1, temp2... Дурацкая привычка. Никак не отвыкну, уж слишком быстро пишется слово temp. :D
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.