Jump to content
  • 0

Помогите с организацией прайсов на сайте


Advisor
 Share

Question

Есть задание:

У юзеров сайта в личном кабинете должен быть список прайсов. Должна быть возможность добавлять/удалять/просматривать. Гости могут просматривать прайсы и искать по записям.

cms - Joomla, cистема управления пользователями - community builder.

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

Link to comment
Share on other sites

21 answers to this question

Recommended Posts

  • 0
Как лучше организовать импорт прайсов на сайт?

Про импорт прайсов могу сказать только. Я делал так:

1) берем прайс в формате XLS

2) конвертируем его в файл CSV

3) при помощи PHP парсим

4) заносим в базу

Link to comment
Share on other sites

  • 0

Ну это... самому писать надо. CSV - данные, записанные через запятую, ну вот их разбиваем в массив при помощи explode();, а потом с массивом работаем. Кто на PHP программирует лучше расскажет. Я же этим занимался в далеком 2006 году и все забыл уже без практики то...

Link to comment
Share on other sites

  • 0

Умные люди подсказали, насчет импорта csv без phpmyadmin:

- сделать страничку с формой загрузки файла;

- после отправки формы:

1. загрузить файл,

2. открыть его для чтения,

3. разбить на строки - каждая строка - один запрос на добавление значений,

4. строки разбить по разделителю (по точкам с запятой, например)

5. выполнить запрос типа "INSERT INTO table VALUES ([поля из файла])".

- как вариант: добавить имя файла и дату загрузки в таблицу прайсов.

Так вот ответьте пожалуйста на идиотский вопрос :rolleyes:

Вот форма загрузки файлов на сервер:

<html>
<head>
<title>Загрузка файлов на сервер</title>
</head>
<body>
<h2><p><b> Форма для загрузки файлов </b></p></h2>
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="file" name="filename"><br>
<input type="submit" value="Загрузить"><br>
</form>
</body>
</html>

И сам скрипт:

<html>
<head>
<title>Результат загрузки файла</title>
</head>
<body>
<?php
if($_FILES["filename"]["size"] > 1024*3*1024)
{
echo ("Размер файла превышает три мегабайта");
exit;
}
if(copy($_FILES["filename"]["tmp_name"],
"c:/temp/".$_FILES["filename"]["name"]))
{
echo("Файл успешно загружен <br>");
echo("Характеристики файла: <br>");
echo("Имя файла: ");
echo($_FILES["filename"]["name"]);
echo("<br>Размер файла: ");
echo($_FILES["filename"]["size"]);
echo("<br>Каталог для загрузки: ");
echo($_FILES["filename"]["tmp_name"]);
echo("<br>Тип файла: ");
echo($_FILES["filename"]["type"]);
} else {
echo("Ошибка загрузки файла");
}
?>
</body>
</html>

Так вот при нажатии Загрузить эта форма открывается в новом окне и хз че происходит...

В скрипте самой формы указываю вместо upload.php -

http://мойсайт.ru/files/upload.php

форму вставляю в жумле как custom code и вешаю на кнопку в меню

и как правильно указывать директорию загрузки на сайт вместо c:/temp/ ? :|

Link to comment
Share on other sites

  • 0

1) проверь правильность пути для upload.php, и вовсе не обязательно указывать абсолютный путь, можно и относительный, главное что бы данная директория и сам файл существовали по адресу.

2) а вместо c:/temp/ указывай директорию, которая у тебя на сервере создана для файлов и используй относительный путь.

Link to comment
Share on other sites

  • 0

спасибо.

Только новый косяк: загруженный файл отображается в файлообменнике на хостинге, а в ftp менеджере не отображается (Тоtal commander)

права у файла на хостинге у него были какие-то другие - я изменил на 777 - та же фигня...

Link to comment
Share on other sites

  • 0

может не в ту директорию загружаете?

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

index.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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Загрузка изображений</title>
<script>
function xdropFile(btn)
{
if(document.getElementById)
{
tr = btn;
while (tr.tagName != 'TR') tr = tr.parentNode;
tr.parentNode.removeChild(tr);
checkForLast();
}
}

function xaddFile(btn)
{
if(document.getElementById)
{
tr = btn;
while (tr.tagName != 'TR') tr = tr.parentNode;
var idSuffix = Math.round(Math.random()*1000);
var newTr = tr.parentNode.insertBefore(tr.cloneNode(true),tr.nextSibling);
thisChilds = newTr.getElementsByTagName('td');
for (var i = 0; i < thisChilds.length; i++)
{
if (thisChilds[i].className == 'header') thisChilds[i].innerHTML = '';
if (thisChilds[i].className == 'files') thisChilds[i].innerHTML = '<input size="32" name="xtt[]" class="wideFile" type="file">';
}
checkForLast();
}
}

function checkForLast()
{
btns = document.getElementsByName('xdrop');
for (i = 0; i < btns.length; i++)
{
btns[i].disabled = (btns.length == 1) ? true : false;
}
}
</script>
</head>
<body>
<form action="upload.php" method="post" name="form" ENCTYPE="multipart/form-data" align="center">
<table width=20% align=center>
<tr>
<td width="20%"><input type="file" size="32" name="xtt[]"></td>
<td nowrap="nowrap">
<input type="button" name="xdrop" value=" −" onClick="xdropFile(this);">
<input type="button" value=" + " onClick="xaddFile(this);">
</td>
</tr>
</table>
<input name="" type="submit">
</form>
</body>
</html>

upload.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">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Документ без названия</title>
</head>
<body>
<?php
for($i=0;$i<count($_FILES['xtt']['name']);$i++)
{
$blacklist = array(".php", ".phtml", ".php3", ".php4"); //тут список файлов с расширением которые нельзя загружать
foreach ($blacklist as $item)
{
if(preg_match("/$item\$/i", $_FILES['xtt']['name'][$i]))
{
echo "Нельзя загружать файлы с таким расширением";
exit;
}
}
$uploaddir = 'foto/'; //меняешь на свою директорию
if (is_dir($uploaddir))
{
//Проверяем, была ли открыта директория
if ($dir = opendir($uploaddir))
{
//Сканируем директорию
while (false !== ($file = readdir($dir)))
{
//Убираем лишние элементы
if ($file != "." && $file != "..")
{
//Выводим спиоск в браузер
echo "<ul><li>".$file."</li></ul>";
}
}
//Закрываем директорию
closedir($dir);
}
}
$uploadfile = $uploaddir . basename($_FILES['xtt']['name'][$i]);
if (move_uploaded_file($_FILES['xtt']['tmp_name'][$i], $uploadfile))
{
echo "Изображение №".$i." УСПЕШНО загружено.\n<br>";
}
else
{
echo "Изображение №".$i." НЕ ЗАГРУЖЕНО!\n<br>";
}
}
?>
</body>
</html>

Link to comment
Share on other sites

  • 0

Глупый вопрос конечно, но как может юзер импортировать СВОЙ прайс на сайт? :rolleyes: Он интуитивно догадается в каком формате и что импортировать (в смысле разметки и т.д.).

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

Да и если это стандартный прайс лист, средне статистической конторы. То полюбому изобилует глупейшими формулами, логотипами на пол листа и т.д.

Оформить "чужой воспаленный мозг" на сайте в таблицах практически невозможно.

Я вышел из этой ситуации туго :D Просто тематика была сходной и после парсера сравнивал с "синонимами".

П.С. В РНР ненужно ничего конвертировать. Парсить можно прямо из excel`евского формата.

А еще иногда (в довольно многих конторах), прайсы клепают на word`е.

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

Хотя.... непонятен мотив. Возможно есть простое и элегантное решение. Но невидно цели.

Edited by Ururu
Link to comment
Share on other sites

  • 0

rus, спасибо, интересный скрипт :rolleyes:

Ururu, сайт - справочная. у каждого юзера(клиента справочной) в личном кабинете будет список прайсов. возможности - добавить/удалить/просмотреть прайс. гости - могут только просматривать все прайсы и искать по ним. также для клиентов будет инструкция как переделать прайс в CSV ибо

— "Оформить "чужой воспаленный мозг" на сайте в таблицах практически невозможно."

Edited by Advisor
Link to comment
Share on other sites

  • 0

Ответьте пожалуйста на нубский вопрос))

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

Link to comment
Share on other sites

  • 0

Извините, неправильно поставил вопрос :rolleyes: (действительно нубский :D)

Сейчас таблица отображается на новой странице, но нет ни меню ни оформления - просто одна таблица на белом фоне

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

Ururu, да обычный скрипт: соединение с базой, перевод таблицы в ассоциативный массив, и вывод на сайт строк из этого массива

Edited by Advisor
Link to comment
Share on other sites

  • 0

тут только два варианта:

1) очевиден, то есть просто в обработчик скопипастить код с главной страницы с меню и прочими плюшками и вставить.

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

2) способ который я приводил постом выше, но тут тоже не без минусов, которые описал там же, но можно все-равно сделать кой-какую защиту для "дураков" в htaccess изменить пути и названия директорий на которые ссылается обработчик и в браузер выдавать путь типа чпу.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy