Posts Tagged ‘array’

Ext JS criando um combo box através de um array JavaScript

Postado em 15 jan 2009
Categoria(s) Ext JS, JavaScript

Adicionei na página o JavaScript: ext-all.js

No html adicione:

1
2
<div>
  <input type="text" id="local-states" size="20" /></div>

Adicione na página o JavaScript:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<script language="JavaScript">
// Executado quando a página termina de carregar
Ext.onReady(function() {
 
  // Array de states para popular o combo box
  var states = [
      ['AL', 'Alabama', 'The Heart of Dixie'],
      ['AK', 'Alaska', 'The Land of the Midnight Sun'],
      ['AZ', 'Arizona', 'The Grand Canyon State'],
      ['AR', 'Arkansas', 'The Natural State'],
      ['CA', 'California', 'The Golden State'],
      ['CO', 'Colorado', 'The Mountain State'],
      ['CT', 'Connecticut', 'The Constitution State'],
      ['DE', 'Delaware', 'The First State'],
      ['DC', 'District of Columbia', "The Nation's Capital"],
      ['FL', 'Florida', 'The Sunshine State'],
      ['GA', 'Georgia', 'The Peach State'],
      ['HI', 'Hawaii', 'The Aloha State'],
      ['ID', 'Idaho', 'Famous Potatoes'],
      ['IL', 'Illinois', 'The Prairie State'],
      ['IN', 'Indiana', 'The Hospitality State'],
      ['IA', 'Iowa', 'The Corn State'],
      ['KS', 'Kansas', 'The Sunflower State'],
      ['KY', 'Kentucky', 'The Bluegrass State'],
      ['LA', 'Louisiana', 'The Bayou State'],
      ['ME', 'Maine', 'The Pine Tree State'],
      ['MD', 'Maryland', 'Chesapeake State'],
      ['MA', 'Massachusetts', 'The Spirit of America'],
      ['MI', 'Michigan', 'Great Lakes State'],
      ['MN', 'Minnesota', 'North Star State'],
      ['MS', 'Mississippi', 'Magnolia State'],
      ['MO', 'Missouri', 'Show Me State'],
      ['MT', 'Montana', 'Big Sky Country'],
      ['NE', 'Nebraska', 'Beef State'],
      ['NV', 'Nevada', 'Silver State'],
      ['NH', 'New Hampshire', 'Granite State'],
      ['NJ', 'New Jersey', 'Garden State'],
      ['NM', 'New Mexico', 'Land of Enchantment'],
      ['NY', 'New York', 'Empire State'],
      ['NC', 'North Carolina', 'First in Freedom'],
      ['ND', 'North Dakota', 'Peace Garden State'],
      ['OH', 'Ohio', 'The Heart of it All'],
      ['OK', 'Oklahoma', 'Oklahoma is OK'],
      ['OR', 'Oregon', 'Pacific Wonderland'],
      ['PA', 'Pennsylvania', 'Keystone State'],
      ['RI', 'Rhode Island', 'Ocean State'],
      ['SC', 'South Carolina', 'Nothing Could be Finer'],
      ['SD', 'South Dakota', 'Great Faces, Great Places'],
      ['TN', 'Tennessee', 'Volunteer State'],
      ['TX', 'Texas', 'Lone Star State'],
      ['UT', 'Utah', 'Salt Lake State'],
      ['VT', 'Vermont', 'Green Mountain State'],
      ['VA', 'Virginia', 'Mother of States'],
      ['WA', 'Washington', 'Green Tree State'],
      ['WV', 'West Virginia', 'Mountain State'],
      ['WI', 'Wisconsin', "America's Dairyland"],
      ['WY', 'Wyoming', 'Like No Place on Earth']
    ];
 
    // Define o nome para cada posição do array de states, armazena todas as informações
    var store = new Ext.data.SimpleStore({
      fields: ['abbr', 'state', 'nick'], // nome de cada coluna do array de states
      data: states // array de states
    });
 
    // Cria o combo box
    var combo = new Ext.form.ComboBox({
      store: store, // Define o armazenamento das informações
      displayField: 'state', // Coluna que será exibida no combo box
      typeAhead: true, // Leia a api: http://extjs.com/deploy/ext/docs/output/Ext.form.ComboBox.html
      mode: 'local', // Leia a api: http://extjs.com/deploy/ext/docs/output/Ext.form.ComboBox.html
      forceSelection: true, // Leia a api: http://extjs.com/deploy/ext/docs/output/Ext.form.ComboBox.html
      triggerAction: 'all', // Leia a api: http://extjs.com/deploy/ext/docs/output/Ext.form.ComboBox.html
      emptyText: 'Select a state...', // Texto no combo box quando nenhum elemento está selecionado
      selectOnFocus: true, // Leia a api: http://extjs.com/deploy/ext/docs/output/Ext.form.ComboBox.html
      applyTo: 'local-states' // Campo input que será usado para gerar o combo box
    });
});
</script>

Leia os comentários no código para entender como toda mágica acontece. :-)

  • Share/Bookmark

Helper para criar breadcrumb em Ruby on Rails

Postado em 14 jan 2009
Categoria(s) Ruby on Rails

Estou desenvolvendo uma aplicação em rails, hoje surgiu a necessidade de criar a navegação por breadcrumb. Fui atrás para ver o que já existia em Rails, infelizmente encontrei algumas coisas complexas e estourando o escopo da minha minha necessidade. Na verdade o que eu precisava era criar links e algumas vezes somente aparecer o texto sem link no breadcrumb.

Em vez de perder um tempão na internet fuçando, decidi fazer um helper para gerar o breadcrumb conforme a minha necessidade.

Fiz o seguinte, no application_helper.rb criei o método breadcrumb:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Methods added to this helper will be available to all templates in the application.
module ApplicationHelper
 
  def breadcrumb(array)
    output = '
<div class="breadcrumb">'
    size = array.size - 1
    array.each {
      |e| e.each {
        |key, value|
 
        if value.empty?
          output += key
        else
          output += link_to(key, value)
        end
 
        output += " > " if size > 0
      }
 
      size -= 1
    }
    output += '</div>
'
 
    return output
  end
end

No meu template eu chamo o helper breadcrumb passando um array e em cada posição do array um hash separado pela chave e valor, onde a chave é o texto e o valor é o link. Caso no valor eu passe uma string vazia ”, apenas é colocado o texto no breadcrumb.

Exemplo no template show.rhtml:

1
<%= breadcrumb([{ 'Home' => home_url }, { 'Notícias' => url_for(:controller => :histories) }, { @history.title => '' }]) %>

Que vai gerar o seguinte html:

1
<a href="http://localhost:3000/">Home</a> > <a href="/histories">Notícias</a> > Governo Federal qualifica a gestão da área de Tecnologia da Informação

Outro exemplo mais simples:

1
2
3
<%= breadcrumb([{ 'Home' => 'http://patrickespake.wordpress.com' }, { 'Tags' => 'http://patrickespake.wordpress.com/tags') }, { 'Ruby on Rails' => '' }]) %>
 
<%= breadcrumb([{ 'Home' => 'http://patrickespake.wordpress.com' }, { 'Tags' => 'http://patrickespake.wordpress.com/tags') }]) %>

Se você gostou desse texto e acha que ajudou você, me recomende: Recommend Me.

  • Share/Bookmark

A Falta de padronização dos retornos dos métodos de consulta do ORM Doctrine são irritantes

Postado em 05 dez 2008
Categoria(s) Doctrine

A Falta de padronização dos retornos dos métodos de consulta do Doctrine são irritantes, no ORM Doctrine as consultas realizadas com Doctrine_Query e o método findByDql retornam valores diferentes.

O Doctrine_Query retorna false, caso não satisfaça a condição where, já o método findByDql retorna um array vazio.

Essa falta de padronização é muito ruim.

Por exemplo:

1
2
3
4
$q = new Doctrine_Query();
$q->from('Status')->where('name = ?', 'exemplo');
$r = $q->execute();
var_dump($r);

Essa forma de consulta retorna false, caso name = ‘exemplo’ não exista. Eu acho esse retorno correto, ou null.

Mas o método findByDql tem um retorno fora de padrão, retornando um array vazio.

Por exemplo:

1
2
$status = Doctrine::getTable('Status')->findByDql("name = 'exemplo'");
var_dump($status);

O ruim é ter que usar essas tecnologias despadronizadas. :-(
Mais um ponto negativo para o Doctrine.

  • Share/Bookmark

symfony usar o object_select_tag para retornar os valores ordenados

Postado em 02 dez 2008
Categoria(s) Symfony

Esses tempos estava usando o object_select_tag (é uma mão na roda), mas precisava trazer os resultados em ordem crescente. Foi ae que eu descobri que existe uma opção peer_method onde é possível definir o método no model para retornar a lista de resultados.

Eu não curto o Propel, prefiro bem mais o Doctrine. Desta forma esse exemplo é baseado usando o Doctrine:

No template:

1
2
3
4
5
6
7
<?php echo object_select_tag(isset($filters['Status']) ? $filters['Status'] : null, null, array (
  'include_blank' => true,
  'related_class' => 'Status',
  'text_method' => '__toString',
  'control_name' => 'filters[Status]',
  'peer_method' => 'getSorted'
)) ?>

No model StatusTable.class.php:

1
2
3
4
5
6
7
public static function getSorted()
{
  $q = new Doctrine_Query();
  $q->from('Status')->orderBy('name ASC');
 
  return $q->execute();
}

No código acima que é possível definir a forma de ordenação e qual coluna que deve ser usada para ordenar.

Agora falta criar o método __toString no model Status.class.php:

1
2
3
4
public function __toString()
{
  return $this->name;
}

O método __toString e usado para imprimir os valores no combo box.

Pronto! ;-)

  • Share/Bookmark