URL widget [Zamknięte]

To pytanie zostało zamknięte z powodu: niezwiązane z tematem lub nieaktualne

przez
Dr.One
na 19.04.2015 12:00:38

Ciąg dalszy nie śpi,

Panowie, chciałbym wykorzystać widget url w taki sposób:
po wpisaniu do pola numeru produktu automatycznie system dodał część np: "www.ebay.com/itm/"<zawartośc pola> co utworzy bezpośredni link do produktu na ebay'u. Oczywiście mogę wpisać  ręcznie ale nie będzie to wyglądało zbyt dobrze (www.ebay.com/itm/732463528174) poza tym wpłynie znacząco na układ strony.

Jakies sugestie ?

Domyślam się, że trzeba utworzyć funkcję która do określonego pola będzie dodawała tę pierwszą część (nie wiem jednak jak to zrobić - jeszcze). Byłoby pieknie gdyby jednak ta część była niewidoczna dla użytkownika, jedynie numer.

Powtórzę się pewnie ale w PHP jest to do zrobienia w dwie minuty Odoo jednak ... jest trochę jeszcze "nieczytelne" dla mnie :)

Dr.One
Dr.One
341
| 5 3 5
Data pytania 20.03.2015, 13:26
0
głos
1742 Odsłony

Rozwiązanie przyszło .... samo :)

W ferworze poszukiwań zacząłem kopać w poszukiwaniu "gdzie siedzi ów Widget odpowiedzialny za tworzenie linków. Znalazłem i zaczęła się zabawa. Nie chcąc przypadkiem spowodować w przyszłości problemów zrobiłem bazując na oryginalnym zupełnie osobny widget "ebay". Przydatne ustrojstwo jeśli nie chcemy wklepywać za każdym razem całego adresu wraz z numerem przedmiotu a jedynie sam numer. Zawsze to oszczędność czasu :)

Wracając jednak do tematu, skopiowałem moduł widget'u FieldUrl, założyłem nową instancję w rejestrze o nazwie "ebay" wprowadziłem część powtarzalną czyli automatycznie dodawany adres zamiast samego "http://" no i mam.

Pięknie działa. Może nie najbardziej eleganckie rozwiązanie ale ...... jak się nie ma co się lubi to się lubi co się ma:)

W sekcji gdzie znajdują się moduły widgetów (w okolicy linii 2490)

[code]

 instance.web.form.FieldEbay = instance.web.form.FieldChar.extend({

    template: 'FieldUrl', <--- tutaj template musi być FieldUrl
    initialize_content: function() {
        this._super();
        var $button = this.$el.find('button');
        $button.click(this.on_button_clicked);
        this.setupFocus($button);
    },
    render_value: function() {
        if (!this.get("effective_readonly")) {
            this._super();
        } else {
            var tmp = this.get('value');
            var s = /(\w+):(.+)|^\.{0,2}\//.exec(tmp);
            if (!s) {
                tmp = "http://" + this.get('value');
}
        var suf = document.getElementById('id'); <-- dodałem zmienną suf aby przekazać wartość ID do wrunku
            if (suf = 'ebay'){ var suf_x = 'http://www.ebay.co.uk/itm/'; tmp = suf_x + this.get('value');} <-- tutaj dodałem adres który jest automatycznie doklejany 
                var text = this.get('value') ? this.node.attrs.text || tmp : '';
            this.$el.find('a').attr('href', tmp).text(text); <-- jeszcze lepiej gdy dodamy zamiast .text(text); takie coś text(this.get('value')); oczywiście zależy to od zapotrzebowania więc jeśli komuś potrzebny bardziej skomplikowany link można przygotować bazyjąc na tym widgecie to co będzie potrzebne. W innym przypadku przygotowałem kwidget który pobiera markę produktu i generuje link do supportu producenta, ot taka bzdurka, w moim przypadku jednak bardzo może się przydać jeśli na przykład panowie z obsługi klienta będa potrzebowali więcej informacji technicznych czy sterowników ..... :)

        }
    },
    on_button_clicked: function() {
        
        
        
        if (!this.get('value')) {
            this.do_warn(_t("Resource Error"), _t("This resource is empty"));
        } else {
            var url = $.trim(this.get('value'));
            if(/^www\./i.test(url))
                url = 'http://'+url;
            window.open(url);
        }
    }
});

[/code]

i w sekcji "Registry"

instance.web.form.widgets = new instance.web.Registry({
    'ebay' : 'instance.web.form.FieldEbay',

......

});

Tadaaaaa !

Jeśli komuś się przyda ......... bardzo proszę. W przyszłości (niedalekiej) przygotuję coś bardziej złożonego pozwalającego na budowanie bazy nazw producentów do późniejszego wykorzystania chociażby w takich bądź podobnych przypadkach.

Dr.One
Dr.One
341
| 5 3 5
Data odpowiedzi 22.03.2015, 23:33
1
głos

Oczywiście jeśli można to zrobić inaczej, lepiej, bardzo proszę o podpowiedzi :)

Dr.One
na 22.03.2015, 23:34

Myślałem nad dodaniem do widgetu warunków sprawdzających nazwę lub ID pola i względem tego ustawiającego adres poprzedzający wprowadzone dane. np jeśli pole ma ID="ebay" skrypt dodaje zamiast samego http:// coś takiego http://www.ebay.com/itm/, jeśli pole ma ID="sklep" dodaje http://www.sklep.com/search/ co pozwoli na automatycznie wyszukanie produktu w sklepie albo na ebay'u. Bez powielania, generowania kolejnych widgetów :0

Dr.One
na 23.03.2015, 16:05

Twoja odpowiedź

Spróbuj dać znacząca odpowiedź. Jeśli chcesz wypowiedzieć się na temat pytania lub odpowiedzi, po prostu użyj narzędzia komentowania. Proszę pamiętać, że zawsze można zrewidować swoją odpowiedź - nie ma potrzeby odpowiadać na to samo pytanie dwa razy. Także prosimy, nie zapomnij zagłosować - to naprawdę pomaga wybrać najlepsze pytania i odpowiedzi!

Zadaj Pytanie

Bądź na bieżąco

O tym forum

Forum dla profesjonalistów i entuzjastów systemu Odoo. Dyskusje, porady, opinie, komentarze.

Przeczytaj wytyczne

Narzędzia do pytań

3 obserwujący

Statystyki

Spytał/a: 20.03.2015, 13:26
Oglądano: 1742 razy
Ostatnia aktualizacja: 19.04.2015, 12:00