Замена стандартного поля цены своим в ubercart

Главные вкладки

Аватар пользователя vicccy vicccy 25 сентября 2012 в 2:20

Всем доброй ночи.
Был сайт с каталогом, но в результате пришлось ставить ubercart. Цена всех товаров уже была прописана с помощью CCК-поля. Очень не хочется переделывать цены всех товаров, поэтому возник вопрос: можно ли где-нибудь прописать какое поле будет использоваться вместо стандртного поля цены. Или придётся переписывать заново цены на все товары?

Комментарии

Аватар пользователя sg85 sg85 25 сентября 2012 в 11:19

Нельзя, это поле используется во всем API уберкарта, перенести все цены из cck в убер вроде можно одним SQL запросом. Структуру таблиц убера к сожалению уже не помню, потому запрос подсказать не смогу. Учите мускул и смотрите таблицы cck и убера

Аватар пользователя divined divined 25 сентября 2012 в 12:18

А не проще хакнуть корзину и дописать свою функцию отображения цены?

Я так сделал на одном проекте.

Надо было сделать 5 цен для разных ролей.

Решение:

1. Написана функция принимающая на вход цену, и возвращающая новую цену
2. Хакнута корзина
3. Все выводы цен обернуты в мою функцию.

Аватар пользователя sg85 sg85 27 сентября 2012 в 7:43

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

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

Аватар пользователя divined divined 27 сентября 2012 в 18:16
который загнулся после обновления, из-за того, что кругом одни хаки.

Хаки для того и созданы чтобы этого не случалось.
Такая ситуация возможно только если вы правите существующий модуль.
Или руки из жопы растут )

Аватар пользователя sg85 sg85 27 сентября 2012 в 19:01

"divined" wrote:
Такая ситуация возможно только если вы правите существующий модуль.

Несколько противоречит
"divined" wrote:
Хаки для того и созданы чтобы этого не случалось.

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

Аватар пользователя divined divined 28 сентября 2012 в 10:10
Хак это и есть правка уже рабочего+существующего+чужого+официального модуля

Вы ничего не путаете??? Это называется патч.

И они слетают при первом же обновлении

Как переопределенная функция может слететь?

Вам в песочницу с такими заявлениями.

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

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

Аватар пользователя Koreychenko Koreychenko 28 сентября 2012 в 11:06

"divined" wrote:

Вы ничего не путаете??? Это называется патч.
И они слетают при первом же обновлении

Как переопределенная функция может слететь?
Вам в песочницу с такими заявлениями.
Хак это перехват выполнения чужой функции и дописывание своего кода.

Вы точно не путаете понятия хак и хук? Wink
Хак (hack) (он же патч, patch) - это изменение кода ядра или модулей. Слетает после обновления этих модулей.

хук (hook) - это возможность переопределить некоторые функции, для которых эти самые хуки были предусмотрены. Это правильный кошерный способ, но НЕ ВСЕ функции друпала можно переопределить.

P.S. По теме топика - 1 MySQL запрос всегда проще и быстрее, чем что-то кодить, ведь автор будет делать это 1 раз, поэтому писать код не оправданно.

Аватар пользователя divined divined 28 сентября 2012 в 12:05

Хак (hack) (он же патч, patch) - где это вы видели такое определение?

Хак и хук одинаковые понятия в русскоязычном сообществе. Хакнутая функция - это функция у которой переопределен вызов (т.е. hook). Вы же не скажете хукнутая корзина? =))) Такого слова просто не существует.

Поэтому говорим хакнутая.

А вообще, возможно, в этом разговоре просто произошло недопонимание.
Естественно я имел ввиду хук в первом посте.

А если продолжать разговор об идеологии слов hack и hook, то это не имеет смысла, т.к. у обоих слов пересекающаяся смысловая интерпретация.

hook - захват
hack - зарубка, зазубрина

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

Как не назови - в итоге получаем "хакнутую корзину".

Аватар пользователя Koreychenko Koreychenko 28 сентября 2012 в 12:19

"divined" wrote:
Хак (hack) (он же патч, patch) - где это вы видели такое определение?
Хак и хук одинаковые понятия в русскоязычном сообществе. Хакнутая функция - это функция у которой переопределен вызов (т.е. hook). Вы же не скажете хукнутая корзина? =))) Такого слова просто не существует.

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

"divined" wrote:
Поэтому говорим хакнутая.

Вы можете говорить как угодно, но это может вызвать непонимание )

"divined" wrote:
Либо вы захватываете чужую функцию, либо ядром друпала предусмотрена зарубка в вызове функций.

Вы что дровосек? Какие еще зарубки? ))))

"divined" wrote:
Т.е. хак производит ядро друпала, а сам результат хук пишет пользователь.

Вот здесь мозг уже закипел )))

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

А если вам необходимо изменить логику работы функции, например, изменить работу функции node_load - то без непосредственной правки кода этой функции в модуле ядра вам не обойтись. Это хак.

"divined" wrote:

Как не назови - в итоге получаем "хакнутую корзину".

Может все-таки темизированную? Или просто с расширенным функционалом.

Когда мы добавляем элементы на форму с помощью хука hook_form_alter, мы же не говорим, что мы хакнули форму.

Аватар пользователя divined divined 28 сентября 2012 в 12:33
Когда мы добавляем элементы на форму с помощью хука hook_form_alter, мы же не говорим, что мы хакнули форму.

Вообще-то, если почитаете форум тут часто именно так и говорят ))))

hack от слова hacker.

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

Т.е. процесс прерывания выполнения чужой функции называется hack, а переопределенная функция hook.

Аватар пользователя sg85 sg85 28 сентября 2012 в 17:46

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

Теперь хук - это ловушка, суть в том, что для реакции на какое либо действие, приложению\коду\еще кому-то, необходимо как-то это действие распознать, и желательно не наваливаясь на распазноваемое(иначе многозадачности капут), для этого эти самые приложения\etc выставляют так называемые ловушки, они же хуки(причем делается это абсолютно легально), которые, при срабатывании этих действий, будут вызваны программой/ОС/еще чем то, с передачей в них информации об этом событии(в виде аргументов функции), хуки используются далеко не только в друпал. Или же вы хотите сказать, что драйвер на клавиатуру(регулятор громкости, например, работает именно через хук) - это тоже хакерское ПО? Wink

Конкретно в Друпал:

Хук - это не изменение и даже не переопределение, это всего лишь дополнение к выполнению основного кода(как уже описано выше, и собственно не только в друпал)
1 сработало событие
2 отработался некий основной скрипт(обычно начальная подготовка аргументов)
3 вызвались все установленные хуки
4 результат сохраняется или с ним проводятся какие либо другие действия
а в случаях, когда приходится переопределять результат работы основного модуля(например убрать поле из формы), это называется в простонародии "костылем"

Хак - топорный способ, т.е. грубый, т.е. тот который стоит использовать в самую последнюю очередь, либо в УГ сайтах(по аналогии, например стул, если он полностью сделан с помощью топора, на нем ведь не очень будет удобно потом сидеть?), в данном случае, просто правка кодов уже готовых модулей.

Аватар пользователя divined divined 28 сентября 2012 в 18:13
Хакерами в ИТ называли высококвалифицированных программистов, которые исправляли ошибки в ПО быстрым и не совсем красивым, топорным, и заметьте, не фен шуйным способом(прямая правка кода, основной массовый промысел - кряки в пиратском ПО)

А теперь откройте словарик и посмотрите значение.
И не забывайте про их виды.

Вы из хакера делаете какого-то недоучку и сами себе противоречите.

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

То что вы привели в пример - просто недоучки, которые смогли освоить только ассемблер на базовом уровне и помимо банального метода тыка в поиске возможной дыры процедуры защиты не могут ничего другого.

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

Хаккинг(Хак) - это процесс.
Хук - это код.
Хакнутый - это результат.

Аватар пользователя sg85 sg85 28 сентября 2012 в 19:45

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

Реальный пример - Ubercart 2, под модуль uc_file, при скачивании файла из вложенных папок, пользователь получает файл вида folder1_folder2_folder3_filename.ext, т.е. в имени файла присутствует вся структура папок, после папки, указанной в настройках уберкарта, для полного счастья не хватает еще и пути до папки с файлами, а нужно именно filename.ext, по сути это баг(либо так задумано, я так и не понял), влезть в функцию передачи файла невозможно ни через какие хуки, Ваши варианты? Изменить одну строчку в коде модуля - грязный, не кошерный, не красивый, да еще и не правильный способ, однако быстрый и главное - рабочий, вот и реальный пример хака.(на самом деле 2 строчки(отображение в админке тоже через одно место), однако 2ю строчку в том же модуле можно изменить через хуки, однако это не совсем быстро и довольно большая нагрузка, да и "гулять так гулять")

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

Хак - это результат
Сделать Хак, Хаккинг - процесс
Хук - это технология
Хакнутый - это прилагательное, по сути свойство

ну и чтоб не это
вот
и вот
(кириллица в url все таки ужас)

Выдержка с последней ссылки:

Quote:

Значение слова «хакер» в первоначальном его понимании, вероятно, возникло в стенах MIT в 1960-е задолго до того, как компьютеры стали широко распространены. Тогда оно являлось частью местного сленга и могло обозначать простое, но грубое решение какой-либо проблемы; чертовски хитрую проделку студентов (обычно автора и называли хакером). До того времени слова «hack» и «hacker» использовались по разным поводам безотносительно к компьютерной технике вообще.
Первоначально появилось жаргонное слово «to hack» (рубить, кромсать). Оно означало процесс внесения изменений «на лету» в свою или чужую программу (предполагалось, что имеются исходные тексты программы). Отглагольное существительное «hack» означало результаты такого изменения. Весьма полезным и достойным делом считалось не просто сообщить автору программы об ошибке, а сразу предложить ему такой хак, который её исправляет. Слово «хакер» изначально произошло именно отсюда.
Хак, однако, не всегда имел целью исправление ошибок — он мог менять поведение программы вопреки воле её автора. Именно подобные скандальные инциденты, в основном, и становились достоянием гласности, а понимание хакерства как активной обратной связи между авторами и пользователями программ никогда журналистов не интересовало. Затем настала эпоха закрытого программного кода, исходные тексты многих программ стали недоступными, и положительная роль хакерства начала сходить на нет — огромные затраты времени на хак закрытого исходного кода могли быть оправданы только очень сильной мотивацией — такой, как желание заработать деньги или скандальную популярность.
В результате появилось новое, искажённое понимание слова «хакер»: оно означает злоумышленника, использующего обширные компьютерные знания для осуществления несанкционированных, иногда вредоносных действий в компьютере — взлом компьютеров, написание и распространение компьютерных вирусов. Впервые в этом значении слово «хакер» было употреблено Клиффордом Столлом в его книге «Яйцо кукушки», а его популяризации немало способствовал голливудский кинофильм «Хакеры». В подобном компьютерном сленге слова «хак», «хакать» обычно относятся ко взлому защиты компьютерных сетей, веб-серверов и тому подобному.
Отголоском негативного восприятия понятия «хакер» является слово «кулхацкер» (от англ. cool hacker), получившее распространение в отечественной околокомпьютерной среде практически с ростом популярности исходного слова. Этим термином обычно называют дилетанта, старающегося походить на профессионала хотя бы внешне — при помощи употребления якобы «профессиональных» хакерских терминов и жаргона, использования «типа хакерских» программ без попыток разобраться в их работе и т. п. Название «кулхацкер» иронизирует над тем, что такой человек, считая себя крутым хакером (англ. cool hacker), настолько безграмотен, что даже не может правильно прочитать по-английски то, как он себя называет. В англоязычной среде такие люди получили наименование «скрипт-кидди».
Некоторые из личностей, известных как поборники свободного и открытого программного обеспечения — например, Ричард Столлмэн — призывают к использованию слова «хакер» только в первоначальном смысле.

«Глайдер», неофициальный символ движения хакеров
Весьма подробные объяснения термина в его первоначальном смысле приведены в статье Эрика Рэймонда «Как стать хакером» [2]. Также Эрик Рэймонд предложил в октябре 2003 года эмблему для хакерского сообщества — символ «глайдера» (glider) из игры «Жизнь». Поскольку сообщество хакеров не имеет единого центра или официальной структуры, предложенный символ нельзя считать официальным символом хакерского движения. По этим же причинам невозможно судить о распространённости этой символики среди хакеров — хотя вполне вероятно, что какая-то часть хакерского сообщества приняла её.